-USING: calendar namespaces alien.c-types system
-windows.kernel32 kernel math combinators windows.errors
-accessors classes.struct calendar.format math.functions ;
+USING: accessors calendar combinators kernel math math.functions
+system windows.errors windows.kernel32 ;
IN: calendar.windows
-M: windows gmt-offset ( -- hours minutes seconds )
- TIME_ZONE_INFORMATION <struct>
- dup GetTimeZoneInformation {
- { TIME_ZONE_ID_INVALID [ win32-error-string throw ] }
- { TIME_ZONE_ID_UNKNOWN [ Bias>> ] }
- { TIME_ZONE_ID_STANDARD [ Bias>> ] }
- { TIME_ZONE_ID_DAYLIGHT [ [ Bias>> ] [ DaylightBias>> ] bi + ] }
- } case neg 60 /mod 0 ;
-
: timestamp>SYSTEMTIME ( timestamp -- SYSTEMTIME )
{
[ year>> ]
[ nip >integer ]
[ - 1000 * >integer ] 2bi
]
- } cleave \ SYSTEMTIME <struct-boa> ;
+ } cleave \ SYSTEMTIME boa ;
: SYSTEMTIME>timestamp ( SYSTEMTIME -- timestamp )
{
[ wDay>> ]
[ wHour>> ]
[ wMinute>> ]
- [ [ wSecond>> ] [ wMilliseconds>> 1000 /f ] bi + ]
- } cleave gmt-offset-duration <timestamp> ;
+ [ [ wSecond>> ] [ wMilliseconds>> 1000 / ] bi + ]
+ } cleave instant <timestamp> ;
+
+M: windows gmt-offset
+ TIME_ZONE_INFORMATION new
+ dup GetTimeZoneInformation {
+ { TIME_ZONE_ID_INVALID [ win32-error ] }
+ { TIME_ZONE_ID_UNKNOWN [ Bias>> ] }
+ { TIME_ZONE_ID_STANDARD [ Bias>> ] }
+ { TIME_ZONE_ID_DAYLIGHT [ [ Bias>> ] [ DaylightBias>> ] bi + ] }
+ } case neg 60 /mod 0 ;
+
+M: windows now-gmt
+ SYSTEMTIME new [ GetSystemTime ] keep SYSTEMTIME>timestamp ;