我有一个时间戳是从
格式的XML文档中提取的2019-02-13T09:01:53.557 + 00:00
有人知道图书馆将其转换为Unix时间吗?还是我不得不摆弄这个字符串?
由于我自己没有生成时间戳,所以我一直发现的答案对我没有太大帮助。 我认为格式是iso8601,但我不确定,因为它似乎还有一些额外的数字,我猜这是ms分辨率(因为它与机床有关),这是问题吗?
答案 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;