'Compiles as-is in PBWin 10 or PBCC 6.

#compile exe

#dim all

#if %pb_cc32   'Ignored by PBWin, no need to remove.

  #console off 'Stops creation of unneeded console in PBCC

#endif

type SYSTEMTIME

  wYear         as word

  wMonth        as word

  wDayOfWeek    as word

  wDay          as word

  wHour         as word

  wMinute       as word

  wSecond       as word

  wMilliseconds as word

end type

declare function SystemTimeToFileTime lib "Kernel32.dll" _

   alias "SystemTimeToFileTime" (lpSystemTime as SYSTEMTIME, _

   lpFileTime as quad) as long

declare function FileTimeToSystemTime lib "Kernel32.dll" _

   alias "FileTimeToSystemTime" (lpFileTime as quad, _

   lpSystemTime as SYSTEMTIME) as long

function pbmain () as long

  local ST as systemtime

  local FT as quad

  local hTxt as dword

  local x as word

  txt.window("About FILETIME and SYSTEMTIME", 200, 150, 24, 65) to hTxt

  FT = &h8000000000000000

  txt.print " A FileTime of &h8000000000000000 returns:"

  txt.print FileTimeToSystemTime (FT, ST); "  'zero if error"

  txt.print

  txt.print "&h8000000000000000 - 1 = &h7FFFFFFFFFFFFFFF";

  FT = &h7FFFFFFFFFFFFFFF

  txt.print "  'which returns:"

  txt.print FileTimeToSystemTime (FT, ST); "  'non-zero if success"

  txt.print "Making it the maximum FileTime. Or,"

  txt.print dec$(ST.wYear, 4); "-"; dec$(ST.wMonth, 2); "-";

  txt.print dec$(ST.wDay, 2); "T"; dec$(ST.wHour, 2); ":";

  txt.print dec$(ST.wMinute, 2); ":"; dec$(ST.wSecond, 2); ".";

  txt.print dec$(FT mod 10000000 , 7); "Z";

  txt.print "  'ISO 8601 format from SystemTime."

  txt.print

  txt.print " "; string$$(63, "=")

  txt.print

  txt.print "SystemTimeToFileTime returns as error with that SystemTime."

  txt.print "The latest SystemTime that does not error is:"

  txt.print "ST.wYear = 30827" tab(20)

  txt.print "ST.wMonth = 12" tab(40)

  txt.print "ST.wDay    = 31"

  txt.print "ST.wHour  = 23" tab(20)

  txt.print "ST.wMinute = 59" tab(40)

  txt.print "ST.wSecond = 59"

  txt.print "ST.wmilliseconds = 999"

  txt.print

  txt.print "So the maximum SystemTime is in ISO 8601 is:"

  ST.wYear = 30827   :  ST.wMonth = 12     :  ST.wDay    = 31

  ST.wHour  = 23     :  ST.wMinute = 59    :  ST.wSecond = 59

  ST.wmilliseconds = 999

  txt.print dec$(ST.wYear, 4); "-"; dec$(ST.wMonth, 2); "-";

  txt.print dec$(ST.wDay, 2); "T"; dec$(ST.wHour, 2); ":";

  txt.print dec$(ST.wMinute, 2); ":"; dec$(ST.wSecond, 2); ".";

  txt.print dec$(FT mod 10000000 , 7); "Z"

  txt.print

  txt.print "Converted to FileTime:"

  SystemTimeToFileTime (ST, FT)

  txt.print "&h";hex$(FT, 16)

  txt.print

  txt.print "Any key to exit.

  txt.waitkey$

end function