【问题标题】:JS Date seconds gives different date in c#JS Date seconds 在 c# 中给出不同的日期
【发布时间】:2018-05-03 10:36:54
【问题描述】:

我正在开发一个小型电子商务,其中客户主服务器将Date 发送为GET 参数的秒数。基于此,我必须检查从他们发送的Date 分钟是否不超过当前DateTime 中的20 分钟。

目前的问题是C# DateTime 总是在Date 从他们的服务器发送之前3 小时

如果我执行new Date(2018, 4, 3, 12, 25, 00).getTime() / 1000(获取纪元的秒数​​)并将其传递给服务器端的DateTime我总是提前 3 小时获得,所以在这个例子中我'我得到03-05-2018 09:25:00

这就是我在服务器中解析Date 的方式

DateTime sDt = (new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Local))
  .AddSeconds(double.Parse(sessionDs.Tables[0].Rows[0]["DT"].ToString()));

DataColumn 的值是 JS Date 的秒数

这是为什么呢?我错过了什么?

【问题讨论】:

  • 您的网络服务器在哪个时区?您客户的主服务器在哪里?
  • 我的是UTC +2,但是当我用浏览器生成的自定义秒数进行测试时,它们不应该是一样的吗?
  • 我现在的时间是1;47PM
  • 确认服务器上的时区与您的机器上的时区相同。否则 DateTimeKind.Local 会将时间更改为您的本地机器时间,并且它将与服务器值不同。理想情况下,您应该以 UTC 发送时间。
  • 您的当地时间与 UTC 相差 3 小时。这可能解释了你所看到的。一端是处理 UTC,另一端是处理您的时区。 timeanddate.com/worldclock/timezone/utc

标签: javascript c# datetime


【解决方案1】:

Javascript Date.getTime 使用 UTC,如文档所述:

getTime() 方法返回对应的数值 指定日期的时间根据通用时间。

所以你应该像这样调整你的 C# 代码:

DateTime sDt = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) // <
    .AddSeconds(yourJsNumber).ToLocalTime();

如果您不需要本地时区的日期,您可以省略 ToLocalTime 并使用 UTC。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2022-07-07
    • 2019-08-28
    • 2020-09-08
    • 2022-08-19
    相关资源
    最近更新 更多