gmt-offset now calls an alien function to deal with daylight savings and timezone
parent
b2feff018a
commit
9e67f14fd5
|
@ -1,16 +1,10 @@
|
||||||
|
IN: calendar
|
||||||
USING: arrays errors generic hashtables io kernel math
|
USING: arrays errors generic hashtables io kernel math
|
||||||
namespaces sequences strings prettyprint inspector ;
|
namespaces sequences strings prettyprint inspector ;
|
||||||
IN: calendar
|
|
||||||
|
|
||||||
TUPLE: timestamp year month day hour minute second gmt-offset ;
|
TUPLE: timestamp year month day hour minute second gmt-offset ;
|
||||||
TUPLE: dt year month day hour minute second ;
|
TUPLE: dt year month day hour minute second ;
|
||||||
|
|
||||||
SYMBOL: gmt-offset
|
|
||||||
-6 gmt-offset set-global ! central time
|
|
||||||
|
|
||||||
LIBRARY: libc
|
|
||||||
FUNCTION: time_t time ( time_t* t ) ;
|
|
||||||
|
|
||||||
: month-names
|
: month-names
|
||||||
{
|
{
|
||||||
"Not a month" "January" "February" "March" "April" "May" "June"
|
"Not a month" "January" "February" "March" "April" "May" "June"
|
||||||
|
@ -198,7 +192,7 @@ M: number +second ( timestamp n -- timestamp )
|
||||||
over set-timestamp-gmt-offset ;
|
over set-timestamp-gmt-offset ;
|
||||||
|
|
||||||
: >local-time ( timestamp -- timestamp )
|
: >local-time ( timestamp -- timestamp )
|
||||||
gmt-offset get convert-timezone ;
|
gmt-offset convert-timezone ;
|
||||||
|
|
||||||
: >gmt ( timestamp -- timestamp )
|
: >gmt ( timestamp -- timestamp )
|
||||||
0 convert-timezone ;
|
0 convert-timezone ;
|
||||||
|
@ -283,3 +277,4 @@ M: number +second ( timestamp n -- timestamp )
|
||||||
dup timestamp-minute unparse 2 CHAR: 0 pad-left write ":" write
|
dup timestamp-minute unparse 2 CHAR: 0 pad-left write ":" write
|
||||||
timestamp-second >fixnum unparse 2 CHAR: 0 pad-left write " GMT" write
|
timestamp-second >fixnum unparse 2 CHAR: 0 pad-left write " GMT" write
|
||||||
] string-out ;
|
] string-out ;
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
USING: kernel modules sequences ;
|
USING: kernel modules namespaces sequences ;
|
||||||
"calendar"
|
|
||||||
|
|
||||||
|
"calendar"
|
||||||
|
[
|
||||||
{
|
{
|
||||||
{ [ win32? ] [ { "os-win32.factor" } ] }
|
{ [ unix? macosx? not and ] [ "os-unix.factor" , "os-linux.factor" , ] }
|
||||||
{ [ t ] [ { "os-unix.factor" } ] }
|
{ [ macosx? ] [ "os-unix.factor" , "os-macosx.factor" , ] }
|
||||||
|
{ [ unix? ] [ "os-unix.factor" , ] }
|
||||||
|
{ [ win32? ] [ "os-win32.factor" , ] }
|
||||||
} cond
|
} cond
|
||||||
{
|
"calendar.factor" ,
|
||||||
"calendar.factor"
|
] { } make
|
||||||
} append
|
|
||||||
|
|
||||||
{ "test/calendar.factor" }
|
{ "test/calendar.factor" }
|
||||||
provide
|
provide
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
IN: calendar
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN-STRUCT: tm
|
||||||
|
FIELD: int sec ! Seconds: 0-59 (K&R says 0-61?)
|
||||||
|
FIELD: int min ! Minutes: 0-59
|
||||||
|
FIELD: int hour ! Hours since midnight: 0-23
|
||||||
|
FIELD: int mday ! Day of the month: 1-31
|
||||||
|
FIELD: int mon ! Months *since* january: 0-11
|
||||||
|
FIELD: int year ! Years since 1900
|
||||||
|
FIELD: int wday ! Days since Sunday (0-6)
|
||||||
|
FIELD: int yday ! Days since Jan. 1: 0-365
|
||||||
|
FIELD: int isdst ! +1 Daylight Savings Time, 0 No DST,
|
||||||
|
END-STRUCT
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
IN: calendar
|
||||||
|
USING: alien arrays compiler errors kernel math ;
|
||||||
|
|
||||||
|
TYPEDEF: uint time_t
|
||||||
|
|
||||||
|
BEGIN-STRUCT: tm
|
||||||
|
FIELD: int sec ! Seconds: 0-59 (K&R says 0-61?)
|
||||||
|
FIELD: int min ! Minutes: 0-59
|
||||||
|
FIELD: int hour ! Hours since midnight: 0-23
|
||||||
|
FIELD: int mday ! Day of the month: 1-31
|
||||||
|
FIELD: int mon ! Months *since* january: 0-11
|
||||||
|
FIELD: int year ! Years since 1900
|
||||||
|
FIELD: int wday ! Days since Sunday (0-6)
|
||||||
|
FIELD: int yday ! Days since Jan. 1: 0-365
|
||||||
|
FIELD: int isdst ! +1 Daylight Savings Time, 0 No DST,
|
||||||
|
FIELD: long gmtoff
|
||||||
|
FIELD: char* zone
|
||||||
|
END-STRUCT
|
||||||
|
|
||||||
|
FUNCTION: time_t time ( time_t* t ) ;
|
||||||
|
FUNCTION: tm* localtime ( time_t* clock ) ;
|
||||||
|
FUNCTION: size_t strftime ( char* buf, size_t maxsize, char* format, tm* timeptr ) ;
|
||||||
|
|
||||||
|
BEGIN-STRUCT: t
|
||||||
|
FIELD: long tv_sec
|
||||||
|
FIELD: long tv_usec
|
||||||
|
END-STRUCT
|
||||||
|
|
||||||
|
BEGIN-STRUCT: tz
|
||||||
|
FIELD: int tz_minuteswest
|
||||||
|
FIELD: int tz_dsttime
|
||||||
|
END-STRUCT
|
||||||
|
|
||||||
|
FUNCTION: int gettimeofday ( t* timeval, tz* timezone ) ;
|
||||||
|
|
||||||
|
: machine-gmt-offset
|
||||||
|
"t" <c-object> "tz" <c-object> 2dup gettimeofday
|
||||||
|
zero? [ nip tz-tz_minuteswest 60 / neg ] [ 2drop 0 ] if ;
|
||||||
|
|
||||||
|
\ gettimeofday compile
|
||||||
|
|
||||||
|
|
||||||
|
: timezone-name
|
||||||
|
get-time tm-zone ;
|
||||||
|
|
||||||
|
: gmt-offset
|
||||||
|
get-time tm-gmtoff 3600 / ;
|
||||||
|
|
|
@ -1,4 +1,32 @@
|
||||||
IN: calendar
|
IN: calendar
|
||||||
USING: alien ;
|
USING: alien arrays compiler errors kernel math ;
|
||||||
|
|
||||||
TYPEDEF: uint time_t
|
TYPEDEF: uint time_t
|
||||||
|
BEGIN-STRUCT: t
|
||||||
|
FIELD: long tv_sec
|
||||||
|
FIELD: long tv_usec
|
||||||
|
END-STRUCT
|
||||||
|
|
||||||
|
FUNCTION: time_t time ( time_t* t ) ;
|
||||||
|
FUNCTION: tm* localtime ( time_t* clock ) ;
|
||||||
|
|
||||||
|
: get-time
|
||||||
|
f time <uint> localtime ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
! BEGIN-STRUCT: tz
|
||||||
|
! FIELD: int tz_minuteswest
|
||||||
|
! FIELD: int tz_dsttime
|
||||||
|
! END-STRUCT
|
||||||
|
|
||||||
|
! FUNCTION: int gettimeofday ( t* timeval, tz* timezone ) ;
|
||||||
|
|
||||||
|
! : machine-gmt-offset
|
||||||
|
! "t" <c-object> "tz" <c-object> 2dup gettimeofday
|
||||||
|
! zero? [ nip tz-tz_minuteswest 60 / neg ] [ 2drop 0 ] if ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue