gpt4 book ai didi

c# - DateTime 到 Unix 时间的转换不一致,24 小时输入时出错

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:13 25 4
gpt4 key购买 nike

附件是我目前正在使用的方法,它接受 DateTime 字符串列表及其输入格式(即 yyyy-MM-dd HH:mm:ss) , 以及它们以小时的形式表示的偏移量。

至于文化和“标准”,我正在使用 InvariantCulture 并将时间转换为 UTC

    public int unixFormat3(string dateTimeInput, string inputFormat, int hours)
{
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;
result = DateTime.ParseExact(dateTimeInput, inputFormat, provider);

int unixTime = (Int32)(result.ToUniversalTime().AddHours(hours).Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc))).TotalSeconds;
return unixTime;
}

上述方法的两个问题:

  1. 我正在使用这个网站作为比较。如果我的输入是 2014-03-18 21:00:00,根据我的方法,我的输出是 1395190800,它会转换回 2014-03 -19 01:00:00。时差四个小时。所需的输出是这样的:

enter image description here

  1. 如果我的输入是 2014-03-18 24:00:00,我会得到这个错误:

日历 System.Globalization.GregorianCalendar 不支持字符串表示的 DateTime。

值得注意的是,它不允许在HH 部分输入24。这是一个奇怪的错误,因为 NodaTime 处理得很好......虽然这与我使用的 DateTime 无关。

有没有人对这方面有任何见解?

编辑:

根据一些实验,删除 .ToUniversalTime() 会删除我的 4 小时偏移量。为什么会这样?

public int unixFormat3(string dateTimeInput, string inputFormat, int hours)
{
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;
result = DateTime.ParseExact(dateTimeInput, inputFormat, provider);

int unixTime = (Int32)(result.AddHours(hours).Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc))).TotalSeconds;
return unixTime;
}

最佳答案

本文档,http://www.w3.org/TR/NOTE-datetime , 在这个问题中引用 How to know whether a given string is a valid UTC DateTime format?没有将 24 列为有效的小时值。

本文档,http://en.wikipedia.org/wiki/Iso8601 ,问题的答案引用确实将 24:00 列为有效时间。这个,http://en.wikipedia.org/wiki/12-hour_clock#Confusion_at_noon_and_midnight , 还说 24:00 是有效的。

关于c# - DateTime 到 Unix 时间的转换不一致,24 小时输入时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com