javascript - 为什么在 javascript 中,创建 1941 年 10 月 1 日到 1945 年 10 月 14 日之间的日期并添加 GMT+0630 作为时区

标签 javascript c# date timezone

我的时区是 (UTC +05:30)钦奈、加尔各答、孟买、新德里。

例如:

var date1 = new Date(1944,04,22,0,0,0);
console.log("date1: " + date1);

// output : 
// date1: Mon May 22 1944 00:00:00 GMT+0630 (India Standard Time)

var date2 = new Date(1992,11,28,0,0,0);
console.log("date2: " + date2);

// output : 
// date2: Mon Dec 28 1992 00:00:00 GMT+0530 (India Standard Time)

date1 在末尾添加 GMT+0630。但如果我选择 1945 年之后的日期,那就没问题,即它添加了 GMT+0530。

为什么 1941 年 10 月 1 日至 1945 年 10 月 14 日之间的日期时区要多加一小时。

当我在 C# 中转换 date1 时:

Convert.ToDateTime("1944-05-21T17:30:00.000Z").ToString("dd/MM/yyyy");

它给我的是 21/05/1944 而不是 22/05/1944。

如何在 C# 中获得正确的日期和时间?

最佳答案

一些事情:

  • 事实上,印度在 1940 年代确实多次使用 UTC+6:30。此信息记录在IANA time zone database中。您还可以引用detail of time in India here .

  • .NET(在 Windows 上运行时)不使用 IANA 时区数据库,而是使用 Microsoft Windows 时区数据库。您可以在 the timezone tag wiki 中了解这两个数据集之间的一些差异。 .

  • Windows 时区数据库通常没有大多数时区的长期历史记录。对于印度标准时间,它没有任何历史记录 - 假设 UTC+5:30 始终有效。如果您的应用程序需要了解历史时区信息,那么您有两个选择:

    1. 如果您使用 .NET Core,则可以在使用完整 IANA 时区数据库的非 Windows 操作系统(Linux、MacOS 等)上运行。标准 TimeZoneInfoDateTimeDateTimeOffset API 将在非 Windows 计算机上使用此数据。

    2. 您可以通过 Noda Time 等库携带自己的 IANA TZDB 数据副本。 。然后你就可以在任何你想要的操作系统上运行。当然,您需要随时更新才能获取 TZDB 的更改。

      您的场景的 Noda Time 示例如下所示:

      Instant utcTime = Instant.FromUtc(1944, 5, 21, 17, 30);
      DateTimeZone tz = DateTimeZoneProviders.Tzdb["Asia/Kolkata"];
      ZonedDateTime zdt = utcTime.InZone(tz);
      LocalDateTime ldt = zdt.LocalDateTime;
      
      Console.WriteLine(ldt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture));
      

      当然,有更短的方法来编写它 - 以及 NodaTime 中用于解析、格式化、操作、转换等的 API。但我认为你明白了。

关于javascript - 为什么在 javascript 中,创建 1941 年 10 月 1 日到 1945 年 10 月 14 日之间的日期并添加 GMT+0630 作为时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52269349/

相关文章:

c# - 我可以向 Java 添加新功能,例如委托(delegate)、后期绑定(bind)等吗?

r - 循环 Date 或 POSIXct 对象会产生数字迭代器

Javascript 重复 if 语句更好的解决方案?

javascript - Angularjs:有没有办法从用户选择的时区创建 timeDate 对象?

c# - 使用 IDisposable 接口(interface)的原因

c# - 调整大小时某些图像会旋转

php - 如何在 MySQL/PHP 中插入和读取时间/日期?

php - 从 MySQL 表中获取最近的日期

javascript - 使用 Javascript 在 5 个元素之后插入横幅 div

javascript - 尝试使用 ASP 隐藏值和 javascript 禁用 CSS 按钮