【问题标题】:Get UTC DateTime by adding server date and UTC TimeSpan in c#通过在 c# 中添加服务器日期和 UTC TimeSpan 来获取 UTC DateTime
【发布时间】:2021-04-22 07:27:34
【问题描述】:

我的数据库中有 UTC TimeSpan,如下所示

item.UTCStartTime = new DateTime(item.StartTime.Ticks).ToUniversalTime().TimeOfDay;

现在我需要当前的 UTC DateTime 以及我的 UTCStartTime。我这样做如下,但它似乎提供了错误的时间。

DateTime time = DateTimeHelper.ConvertUTCToCurrentTimeZone(new DateTime(item.UTCStartTime.Ticks).ToUniversalTime());

然后我像这样更改了上面的行

DateTime time = DateTimeHelper.ConvertUTCToCurrentTimeZone(new DateTime()).Add(item.UTCStartTime);

现在我想我得到了正确的时间,除了句号。它显示与正确的相反。例如:PM 表示 AM,AM 表示 PM 更新:抱歉,时间仍然显示错误

注意:DateTimeHelper.ConvertUTCToCurrentTimeZone() 只是一个 将UTC转换为所需时区的新日期时间的方法 时区编号

【问题讨论】:

  • 什么是“UTC 时间跨度”?时间跨度 - 对我来说 - 类似于“48 小时”,TZ 代号对此毫无意义。现在,如果您将其定义为“从 DateTime 到 DateTime”,那就是另一回事了。就我而言,我需要更多细节,在这里。例如, DateTimeHelper 的实现会很有用。另外:你知道DateTimeOffset的存在吗?
  • 也许也可以看看这个:Coding Best Practices Using DateTime in the .NET Framework。免责声明:这是一篇相当老的文章,我不确定其中有多少仍然适用。
  • 嗯...澄清我的问题。我想将 UTC TimeSpan 转换为印度标准时间的 TimeSpan...
  • 再次:“什么'UTC TimeSpan'”?绝对不是TimeSpan
  • 不,没必要,我相信.. 我刚刚开始工作.. 现在.. 这样做了.. new DateTime(item.StartTime).ToString("hh:mm tt")

标签: c# datetime logic


【解决方案1】:

首先,new DateTime() 返回的值可以显示为1/1/0001 12:00:00 AM(来源:https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=net-5.0)。几乎年、月、日、小时、分钟、秒设置为 0。此外,它返回时没有指定时区(本地或 UTC),因此将其转换为 UTC 没有任何作用。

var date = new DateTime();
Console.WriteLine(date);
Console.WriteLine(date.ToUniversalTime());

// Output
01/01/0001 00:00:00
01/01/0001 00:00:00

因此,您的约会肯定会取消。如果您确定 item.UTCStartTime 包含正确的 UTC 时间,请将其添加到今天的日期,可以这样做:

var utcTimeToday = DateTime.UtcNow.Date.Add(item.UTCStartTime);

【讨论】:

  • “另外,它作为 UTC 时区返回。” 你从哪里得到的?这个fiddle 显示,它是“未指定的”。
  • ^^ 它有一个 0 小时 offset。但这并不完全相同。
  • @tsveds 我刚刚尝试了答案.. 不成功.. 我会做一件事... 我会更新我的问题..
  • @Fildor 好点,会更新我的答案。
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 2020-01-08
  • 2015-01-08
  • 2014-07-22
  • 2021-02-25
  • 2021-04-13
  • 2014-01-06
  • 1970-01-01
相关资源
最近更新 更多