如何从 UTC 偏移量获取日期时间

我正在尝试弄清楚如何使用UTC偏移值获取实例,无论当前系统是哪个UTC,我都必须获得所需的UTC偏移量。DateTimeDateTime


我看到的所有帖子都是关于从中获取UTC字符串数据的,我也看到有一个帖子说如何使用电流计算差异来获得另一个,这似乎不能很好地工作,因为我需要代码才能工作,无论系统使用哪个UTC。DateTimeDateTimeDateTime


到目前为止,我尝试过什么:


public static void Main(string[] args) {

    DateTime utcDateTime = DateTime.UtcNow;

    TimeSpan offSet = TimeSpan.FromHours((double)-4.00); // UTC-4

    DateTime newDateTime = utcDateTime.Add(offSet);


    Console.WriteLine(newDateTime);

}

这是我在另一篇文章中看到的,但看起来它只是以错误的方式改变了小时。请帮忙。


米脂
浏览 81回答 2
2回答

慕慕森

要以特定偏移量(例如 UTC-4)获取当前时间,最简单的方法(恕我直言)是:DateTimeDateTime dt = DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours(-4)).DateTime;获得相同结果的另一种(更混乱)方法是:DateTime dt = DateTime.SpecifyKind(DateTime.UtcNow.AddHours(-4), DateTimeKind.Unspecified);也可以将其保留为 ,这样与UTC的偏移量就不会丢失。DateTimeOffsetDateTimeOffset dto = DateTimeOffset.UtcNow.ToOffset(TimeSpan.FromHours(-4));或者更混乱的方式:TimeSpan offset = TimeSpan.FromHours(-4);DateTime dt = DateTime.SpecifyKind(DateTime.UtcNow.Add(offset), DateTimeKind.Unspecified);DateTimeOffset dto = new DateTimeOffset(dt, offset);但是,在大多数情况下,人们可能不是使用固定的偏移量,而是在特定时区中查找时间,由于夏令时和特定政府观察到的标准时间的变化,该时区可能具有各种不同的偏移量,具体取决于所讨论的日期。另请参阅时区标签 wiki 中的“时区 != 偏移量”。在 .NET 中,类可以为您管理此类更改。在Windows上,它使用Microsoft时区标识符,在Linux或Mac OSX上,它使用IANA时区标识符。例如:TimeZoneInfo// On Windows:TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");DateTime dt = TimeZoneInfo.ConvertTime(DateTime.UtcNow, tz);// On Linux/OSX:TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");DateTime dt = TimeZoneInfo.ConvertTime(DateTime.UtcNow, tz);在这两个示例中,都将应用正确的 UTC 偏移量(UTC-5 表示 EST 或 UTC-4 表示 EDT)。这些也可以使用值编写:DateTimeOffset// On Windows:TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");DateTimeOffset dto = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tz);// On Linux/OSX:TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");DateTimeOffset dto = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tz);此外,如果您需要编写可在任一平台上运行的代码,则可以使用我的 TimeZoneConverter 库在任何平台上使用任一组标识符。

12345678_0001

为什么你们所有人都给出了如此复杂的答案?这是错的吗?DateTime.UtcNow.AddHours(-4); //UTC-4
打开App,查看更多内容
随时随地看视频慕课网APP