OpenVMS Source Code Demos
WCSM_GET_MIME_TIME
function string wcsm_get_mime_time !
!==========================================================================================
! Title : wcsm_get_mime_time_xxx.fun (see: RFC 822)
! Author : Neil Rieck
! History:
! ver who when what
! ---- --- ------ --------------------------------------------------------------------------
! 3 NSR 090514 1. dervived from wcsm_get_gmt_time_2.fun (Dave McNeil)
! 4 NSR 110316 1. added documentation reguarding logical SYS$TIMEZONE_DIFFERENTIAL
! 2. tweaked the code
! NSR 141122 3. update documentation
!==========================================================================================
! Purpose: returns a string like this:
! Thu, 14 May 2009 12:01:01 -0400
! Dependancies: wcsm_trnlnm must be included in calling application's source.
!==========================================================================================
option type=explicit !
!
! Our variables
!
declare basic$quadword quad_time !
declare long rc%, dt_context%, component% !
declare double data_to_test, seconds, minutes, hours, yada !
declare string result$, tz_diff$, tz_name$ !
!
! Include some stuff from the system library
!
%include "starlet" %from %library "sys$library:basic$starlet"
%include "lib$routines" %from %library "sys$library:basic$starlet"
%include "$libdtdef" %from %library "sys$library:basic$starlet"
!
! External stuff
!
external string function wcsm_trnlnm(string, string) !
!
! Note: these logical names will only change if "set_vms_logicals" is added to file TCPWARE:NTP.CONF
! or
! SYSGEN parameter: AUTO_DLIGHT_SAV = 1
!
tz_name$ = wcsm_trnlnm("SYS$TIMEZONE_NAME" , "LNM$SYSTEM_TABLE") !
tz_name$ = "EDT" if tz_name$ = "" ! default to EDT
!~~~ tz_name$ = "EST" if tz_name$ = "" x default to EST
!
tz_diff$ = wcsm_trnlnm("SYS$TIMEZONE_DIFFERENTIAL", "LNM$SYSTEM_TABLE") !
tz_diff$ = "-14400" if tz_diff$ = "" ! default to EDT
!~~~ tz_diff$ = "-16000" if tz_diff$ = "" x default to EST
!
! Notes: 1. the value of SYS$TIMEZONE_DIFFERENTIAL is given in seconds before/after GMT
! 2. +HHMM is described in ISO-8601
!
! data +HHMM zone zone zone zone notes
! ------ ----- ----- ---- ---- ---- ----------------
! -18000 -0500 UTC-5 EST Eastern Standard
! -14400 -0400 UTC-4 EDT AST Eastern Daylight / Atlantic Standard
! -10800 -0300 UTC-3 ADT Atlantic Daylight
! -12600 -0330 NST Newfoundland Standard
! -9000 -0230 NDT Newfoundland Daylight
!
when error in !
data_to_test = real(tz_diff$, DOUBLE) !
seconds = abs(data_to_test) ! make sure this is positive
hours = integer(seconds / 3600.0) ! compute hours
yada = seconds - (hours * 3600.0) ! remainder is minutes
minutes = integer(yada / 60.0) !
!
tz_diff$ = format$(hours, "<0>#") + &
format$(minutes,"<0>#") !
!
if data_to_test < 0 then !
tz_diff$ = "-"+ tz_diff$ ! the spec requires minus
else !
tz_diff$ = "+"+ tz_diff$ ! the spec suggests we need plus
end if !
use ! oops
tz_diff$ = tz_name$ ! use this older format
end when !
!
rc% = sys$gettim(quad_time) ! get current system time
dt_context% = 0 !
component% = LIB$K_OUTPUT_FORMAT !
rc% = lib$init_date_time_context(dt_context%, component%, "|!WAC, !D0 !MAAC !Y4|!H04:!M0:!S0|")
rc% = lib$format_date_time(result$, quad_time, dt_context%,,) !
result$ = result$ +" "+ tz_diff$ !
!
wcsm_get_mime_time = result$ !
end function !