Fortran中的日期时差

Ste*_*itz 3 datetime fortran datediff

我的目标是让fortran返回两次作为字符串传递的差异,与VBA的TimeDiff非常相似.我现在已经在fortran处理日期和时间了很长一段时间,但在这个特殊情况下找不到我需要的东西.fortran中的第一个问题是如何将字符串转换为可进一步计算的时间变量.例如,time_and_dates ctime将时间转换为字符串,但在我的情况下需要的是完全相反的情况.

由于fortran可以很容易地计算出像程序完成所需时间的现场观察,甚至可以从系统本身中消除时间,所以如果我的想法到目前为止,它显然能够计算出这些东西.

但是如何将我的字符串"YYYYMMDD HHMMSS"传递给时间格式,如何用它来计算以及如何对输出进行短语?

这是一个应该导致的例子:

date1 = as.date("20130512 091519") !Stringinput
date2 = as.date("20131116 120418")


result = time.difference(date1,date2,outputunit="seconds")

print*, 'time diff in sec: ', result !returns something like 4646345 as Integer
Run Code Online (Sandbox Code Playgroud)

由于有能力在其他环境中进行此类计算(秒表等),我真的很感激不涉及任何外部扩展或冒险手动编码的解决方案(365 ...闰年... / 400 ......等等).

有没有办法使用fortran的实习生和系统(win64)为我的目的?

如果没有,通过哪种方式将系统的时间信息传递给fortran,这可能是模仿的(因此源不是"系统"而是"字符串")?

编辑:感谢您的输入到目前为止,但如上所述,我最好使用fortrans实习生能力(因为它在秒表中发生)为工作而不是扩展或手动计算.我发现很难相信日期和时间只能转换为角色而不是反过来...但是无论如何,谢谢你.

mil*_*cic 6

我经常在Fortran中处理日期和时间,所以我最终为它编写了一个库:

http://github.com/milancurcic/datetime-fortran

它支持对象datetimetimedelta对象的基本算术和比较运算符(在Python的日期时间之后松散建模),并且还提供与C strftime等的接口strptime.

自从0.3.0版本,strftime并且strptime接口定义直接进行操作datetime的情况下,所以没有必要与tm_structs拨弄.

这是一个简单的程序,可以处理你的情况:

USE datetime_module

TYPE(datetime)  :: date1,date2
TYPE(timedelta) :: timediff

CHARACTER(LEN=15) :: str1 = "20130512 091519"
CHARACTER(LEN=15) :: str2 = "20131116 120418"

date1 = strptime(str1,"%Y%m%d %H%M%S")
date2 = strptime(str2,"%Y%m%d %H%M%S")

timediff = date2-date1

WRITE(*,*)timediff
WRITE(*,*)timediff % total_seconds()

END
Run Code Online (Sandbox Code Playgroud)

输出:

     188           2          48          59           0
  16253339.000000000 
Run Code Online (Sandbox Code Playgroud)

在我的电脑上.