如何在 F# 中将 DateTime 转换为 Unix 时间戳?

3

有没有函数/库/简单代码片段可以做到这一点?

例如,我找到了Python的答案,但没有F#,谢谢。

我在这里找到了另一种方法 http://tryfs.net/snippets/snippet-r6

open System

let toDateTime (timestamp:int) = 
    let start = DateTime(1970,1,1,0,0,0,DateTimeKind.Utc) 
    start.AddSeconds(float timestamp).ToLocalTime()

3
此方法从 UNIX 时间戳创建 DateTimeOffset 对象。UNIX 时间戳是自 1970 年 1 月 1 日 UTC 起经过的秒数。参数 secondsSinceUnixEpoch 表示自 1970 年 1 月 1 日 UTC 起经过的秒数。它可以为正或负,但必须在 DateTimeOffset 所支持的范围内。 - ildjarn
2
从上面的链接中,将UnixTime转换为其他格式或反之的方法是在.NET 4.6.x中添加的。因此,请针对最新版本进行开发。 - s952163
1个回答

4

您需要小心,因为timestamp可能不是int。但是在.NET 4.6.x中,您应该能够使用注释中提到的函数。

.NET 4.6.2

以下是一个示例:

open System
let unix = DateTimeOffset(DateTime.Now).ToUnixTimeSeconds() //val unix : int64 = 1488254491L
let dt =  DateTimeOffset.FromUnixTimeSeconds(unix)  //val dt : DateTimeOffset = 2017/02/28 4:01:31 +00:00
dt.LocalDateTime //val it : DateTime = 2017/02/28 13:01:31

作为ToUnixTimeSecondsFromUnixTimeSeconds操作DateTimeOffset,要么使用它,要么在必要时转换回/向DateTime

顺便说一下,我发现在.fsx文件中,这些方法的智能感知有点不稳定(但是可用)。在.fs文件中,可以正常使用。


1
如果我需要使用早期版本(#NET 4.5)怎么办? - Fagui Curtain
@FaguiCurtain,我不明白你的问题,你在问题中展示了一个计算的片段,SO上也有很多类似的代码片段。基本上,你需要加回自纪元以来的时间。 - s952163

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接