由于该例程只返回两位数值的年份,因此它存在“2000 年安全”问题。在 1999 年 12 月 31 日之后,使用该例程输出计算日期差异的程序可能无法正常工作。如果执行使用此 date() 例程的程序,第一次调用该例程时会显示运行时警告消息,向用户发出报警。请参见另一个可换用的例程 date_and_time()。
该子例程的调用方式如下所示:
call date( c ) |
|||
c |
CHARACTER*9 |
输出 |
变量、数组、数组元素或字符子串 |
返回的字符串 c 的格式为 dd-mmm-yy,其中 dd 表示两位数的当月日期,mmm 表示三个字母的月份缩写,yy 表示两位数的年份(因此存在 2000 年安全问题!)。
示例:date:
demo% cat dat1.f * dat1.f -- Get the date as a character string. character c*9 call date ( c ) write(*,"(’ The date today is: ’, A9 )" ) c end demo% f95 dat1.f demo% a.out Computing time differences using the 2 digit year from subroutine date is not safe after year 2000. The date today is: 9-Jan-02 demo% |
另请参见 idate() 和 date_and_time()。
这是一个 2000 年安全的 Fortran 95 内例程。
子例程 date_and_time 返回实时时钟和日期的相关数据。返回数据包括本地时间以及本地时间与通用协调时间 (Universal Coordinated Time, UTC) 之间的时差,通用协调时间也称为格林威治标准时间 (Greenwich Mean Time, GMT)。
子例程 date_and_time() 的调用方式如下:
call date_and_time( date , time, zone, values ) |
|||
date |
CHARACTER*8 |
输出 |
以 CCYYMMDD 格式表示的日期,其中 CCYY 表示四位数的年份,MM 表示两位数的月份,DD 表示两位数的当月日期。例如:19980709 |
time |
CHARACTER*10 |
输出 |
以 hhmmss.sss 格式表示的当前时间, 其中 hh 表示小时,mm 表示分钟,ss.sss 表示秒和毫秒。 |
zone |
CHARACTER*5 |
输出 |
与 UTC 的时差,以小时数和分钟数表示,采用 hhmm 格式。 |
values |
INTEGER*4 VALUES(8) |
输出 |
下面介绍的 8 个元素组成的整数数组。 |
INTEGER*4 values 数组中返回的 8 个值为
VALUES(1) |
以 4 位整数表示的年份。例如:1998。 |
VALUES(2) |
以从 1 到 12 的整数表示的月份。 |
VALUES(3) |
以从 1 到 31 的整数表示的当月日期。 |
VALUES(4) |
以分钟数表示的与 UTC 的时差。 |
VALUES(5) |
以从 1 到 23 的整数表示的当天小时时间。 |
VALUES(6) |
以从 1 到 59 的整数表示的一个小时中的分钟时间。 |
VALUES(7) |
以从 0 到 60 的整数表示的一分钟中的秒数。 |
VALUES(8) |
位于范围 0 至 999 中的毫秒数。 |
date_and_time 使用示例:
demo% cat dtm.f integer date_time(8) character*10 b(3) call date_and_time(b(1), b(2), b(3), date_time) print *,’date_time array values:’ print *,’year=’,date_time(1) print *,’month_of_year=’,date_time(2) print *,’day_of_month=’,date_time(3) print *,’time difference in minutes=’,date_time(4) print *,’hour of day=’,date_time(5) print *,’minutes of hour=’,date_time(6) print *,’seconds of minute=’,date_time(7) print *,’milliseconds of second=’,date_time(8) print *, ’DATE=’,b(1) print *, ’TIME=’,b(2) print *, ’ZONE=’,b(3) end |
2000 年 2 月 16 日在美国加利福尼亚的一台计算机上运行该例程时,输出结果如下所示:
date_time array values: year= 2000 month_of_year= 2 day_of_month= 16 time difference in minutes= -420 hour of day= 11 minutes of hour= 49 seconds of minute= 29 milliseconds of second= 236 DATE=20000216 TIME=114929.236 ZONE=-0700 |