没有人知道将我的(ISO8601 ???)时间戳字符串转换为UNIX时间戳格式的库吗?

时间:2019-02-13 14:26:03

标签: c# unix timestamp

我有一个时间戳是从

格式的XML文档中提取的

2019-02-13T09:01:53.557 + 00:00

有人知道图书馆将其转换为Unix时间吗?还是我不得不摆弄这个字符串?

由于我自己没有生成时间戳,所以我一直发现的答案对我没有太大帮助。 我认为格式是iso8601,但我不确定,因为它似乎还有一些额外的数字,我猜这是ms分辨率(因为它与机床有关),这是问题吗?

2 个答案:

答案 0 :(得分:1)

使用.NET 4.6及更高版本中的DateTimeOffset.ToUnixTimeSeconds,这应该非常简单:

if (DateTime.TryParse("2019-02-13T09:01:53.557+00:00", out var dateTime))
{
    var unixTimestamp = ((DateTimeOffset)dateTime).ToUnixTimeSeconds();
}

如果出于任何原因您的字符串格式更改,您也可以使用DateTime.TryParseExact进行精确的解析:

if (DateTime.TryParseExact("2019-02-13T09:01:53.557+00:00", "yyyy-MM-dd'T'HH:mm:ss.fffzzz", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out var dateTime))
{
    var unixTimestamp = ((DateTimeOffset)dateTime).ToUnixTimeSeconds();
}

答案 1 :(得分:0)

基本上,您应该考虑Unix时间戳是什么:(from Wikipedia)

  

这是自1970年1月1日(星期四)协调世界时(UTC)减去leap秒以来经过的秒数

因此,可能的解决方案是将字符串解析为日期时间,将其转换为UTC,然后计算秒数。

var date = DateTime.Parse("2019-02-13T09:01:53.557+00:00", null, System.Globalization.DateTimeStyles.RoundtripKind);
var unixTimestamp = (int)(date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds;