Show the epoch: Difference between revisions
(added go) |
(added javascript) |
||
Line 86: | Line 86: | ||
Output: |
Output: |
||
<pre>Jan 1, 1970 12:00:00 AM</pre> |
<pre>Jan 1, 1970 12:00:00 AM</pre> |
||
=={{header|JavaScript}}== |
|||
<lang javascript>document.write(new Date(0).toUTCString());</lang> |
|||
Output: |
|||
<pre>Thu, 01 Jan 1970 00:00:00 GMT</pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |
Revision as of 10:49, 10 August 2011
Choose popular date libraries used by your language and show the epoch those libraries use. A demonstration is preferable (e.g. setting the internal representation of the date to 0 ms/ns/etc., or another way that will still show the epoch even if it is changed behind the scenes by the implementers), but text from (with links to) documentation is also acceptable where a demonstration is impossible/impractical. For consistency's sake, show the date in UTC time where possible.
C
<lang c>#include <time.h>
- include <stdio.h>
int main() {
time_t t = 0; printf("%s", asctime(gmtime(&t))); return 0;
}</lang>
Output:
Thu Jan 1 00:00:00 1970
Go
<lang go>package main import ("fmt"; "time")
func main() {
fmt.Println(time.SecondsToUTC(0))
}</lang>
Output:
Thu Jan 1 00:00:00 UTC 1970
Icon and Unicon
Date and Time can be accessed via a number of keywords and functions
- The following are available in both Icon and Unicon
- &clock, &date, &dateline, and &time deal with current times and dates
- The following are specific to Unicon
- &now provides the number of seconds since the epoch, Jan 1, 1970 00:00:00
- ctime(integer) takes the number of seconds since the epoch and returns the date and time as a string in the local timezone
- gtime(integer) takes the number of seconds since the epoch and returns the date and time as a string in UTC
- gettimeofday() returns a record with the current time since the epoch in seconds and microseconds
- datetime routines use a global variable 'DateBaseYear' which defaults to Jan 1, 1970 00:00:00 but can be set if desired.
- The example below uses only a couple of the datetime procedures
<lang Unicon>link printf,datetime
procedure main()
# Unicon now := gettimeofday().sec if now = &now then printf("&now and gettimeofday().sec are equal\n") printf("Now (UTC) %s, (local) %s\n",gtime(now),ctime(now)) printf("Epoch %s\n",gtime(0)) # Icon and Unicon now := DateToSec(&date) + ClockToSec(&clock) printf("Now is also %s and %s\n",SecToDate(now),SecToDateLine(now))
end</lang>
Sample Output:
&now and gettimeofday().sec are equal Now (UTC) Tue Aug 09 10:43:23 2011, (local) Tue Aug 09 06:43:23 2011 Epoch Thu Jan 01 00:00:00 1970 Now is also 2011/08/09 and Tuesday, August 9, 2011 6:43 am
J
J does not have an epoch. J's native representation of date and time is a six element list: year, month, day, hour, minute, second. For example:
<lang j> 6!:0 2011 8 8 20 25 44.725</lang>
(August 8, 2011, 8:25:44 pm)
That said, the 'dates'
library does have an epoch:
<lang j> require'dates'
todate 0
1800 1 1</lang>
Java
DateFormat
is needed to set the timezone. Printing date
alone would show this date in the timezone/locale of the machine that the program is running on. The epoch used in java.util.Date
(as well as java.sql.Date
, which can be subbed into this example) is actually in GMT, but there isn't a significant difference between that and UTC for lots of applications (documentation for java.util.Date).
<lang java>import java.text.DateFormat;
import java.util.Date;
import java.util.TimeZone;
public class DateTest{
public static void main(String[] args) { Date date = new Date(0); DateFormat format = DateFormat.getDateTimeInstance(); format.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(format.format(date)); }
}</lang> Output:
Jan 1, 1970 12:00:00 AM
JavaScript
<lang javascript>document.write(new Date(0).toUTCString());</lang> Output:
Thu, 01 Jan 1970 00:00:00 GMT
Perl
<lang perl>print scalar gmtime 0, "\n";</lang>
Output:
Thu Jan 1 00:00:00 1970
Perl 6
<lang perl6>say DateTime.new(0)</lang>
1970-01-01T00:00:00Z
PHP
<lang php><?php echo gmdate('r', 0), "\n"; ?></lang>
Output:
Thu, 01 Jan 1970 00:00:00 +0000
PicoLisp
The 'date' function in PicoLisp returns a day number, starting first of March of the year zero. Calculated according to the gregorian calendar (despite that that calendar wasn't used in 0 AD yet). <lang PicoLisp>: (date 1) -> (0 3 1) # Year zero, March 1st</lang>
PowerShell
PowerShell uses .NET's DateTime
structure and an integer can simply be casted appropriately:
<lang powershell>[datetime] 0</lang>
Output:
Monday, January 01, 0001 12:00:00 AM
Python
<lang python>>>> import time >>> time.asctime(time.gmtime(0)) 'Thu Jan 1 00:00:00 1970' >>></lang>
Ruby
<lang ruby>irb(main):001:0> Time.at(0).utc => 1970-01-01 00:00:00 UTC</lang>
Standard ML
<lang sml>- Date.toString (Date.fromTimeUniv Time.zeroTime); val it = "Thu Jan 1 00:00:00 1970" : string</lang>
Tcl
<lang tcl>% clock format 0 -gmt 1 Thu Jan 01 00:00:00 GMT 1970</lang>
UNIX Shell
The nonstandard option date -r
takes seconds from the epoch, and prints date and time. See date(1) manual.
<lang bash>$ date -ur 0 Thu Jan 1 00:00:00 UTC 1970</lang>
Visual Basic
<lang vb>Sub Main()
Debug.Print Format(0, "dd mmm yyyy hh:mm")
End Sub</lang>
Output (in debug window):
30 Dec 1899 00:00