ToUnixTimeMilliseconds 在返回之前将日期转换为 Utc。如果你不想要那个怎么办?
Posted
技术标签:
【中文标题】ToUnixTimeMilliseconds 在返回之前将日期转换为 Utc。如果你不想要那个怎么办?【英文标题】:ToUnixTimeMilliseconds is converting the date to Utc before returning. What if you don't want that? 【发布时间】:2021-11-24 05:42:46 【问题描述】:我正在开发一个 WebAPI。我有一个名为 Assignment 的实体。赋值有一个名为 DateScheduled 的属性,它是一个长整数,它表示一个 UnixTimeStamp,以毫秒为单位。现在在创建作业时,我有一个名为 BeginningOfDay(long date)
的方法,看起来像这样
public static long BeginningOfDay(long date)
DateTimeOffset beg = DateTime.SpecifyKind(DateTimeOffset.FromUnixTimeMilliseconds(date).Date, DateTimeKind.Utc);
return beg.ToUnixTimeMilliseconds();
如果用户在 2021 年 2 月 10 日 21:01:00 传递,该方法将给我 02-10-2021 00:00:00。
现在用户传入的日期已经是UTC。但是当调用beg.ToUnixTimeMilliseconds()
时,它再次将其转换为UTC。哪个导致很多问题?我希望你们能理解我的问题。在本地运行时,它工作正常。但是在服务器上,由于它所在的位置,它搞砸了。给定参数 1633903199 它在本地返回 1633816800 这是正确的。但是 azure 上的相同参数给出了 1633824000 这是不正确的。
【问题讨论】:
【参考方案1】:使用UtcDateTime
代替.Date
,这样您的所有代码都将与UTC 日期对齐。
代码会是这样的:
DateTimeOffset.FromUnixTimeMilliseconds(date).UtcDateTime
【讨论】:
这很好,但如果我想从该日期删除时间怎么办。这就是我使用 .Date 的原因? 我想你也有UTC日期以上是关于ToUnixTimeMilliseconds 在返回之前将日期转换为 Utc。如果你不想要那个怎么办?的主要内容,如果未能解决你的问题,请参考以下文章