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。如果你不想要那个怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

解释到UnixTimeMilliseconds

linkText()的用法

如何解决跨域问题

将 Plaid 与 Salesforce 集成

JWT实现单点登录

JWT设计单点登录