gpt4 book ai didi

c# - 从爱尔兰的服务器获取丹麦的本地日期时间

转载 作者:行者123 更新时间:2023-12-03 04:43:11 27 4
gpt4 key购买 nike

我在爱尔兰的 Azure 中有一个解决方案。我住在丹麦。

在爱尔兰的数据库中将我的所有时间和日期保存为 universal = DateTime.Now.ToUniversalTime() 是否正确?

当我需要丹麦时间时,我不能:universal.ToLocalTime(),因为我仍在爱尔兰的服务器上。相反,我可以写:

danish = TimeZoneInfo.ConvertTimeFromUtc(universal, TimeZoneInfo.FindSystemTimeZoneById("Romance Standard Time"));

但我认为还有很长的路要走。

替代方案 1:在将日期保存到爱尔兰的数据库之前,我将日期转换为丹麦语。替代方案 2:丹麦和爱尔兰之间只有一个时区,因此我可以:danish = dateTime.AddHours(1),但也许它可能会给出夏令时和冬令时的错误。

最佳答案

一些事情:

  • DateTime.Now.ToUniversalTime() 没有任何问题 ,但要了解在幕后是获取当前 UTC 时间,转换为本地时间,然后转换回 UTC。因此,简单地调用 DateTime.UtcNow 既更短又更高效。直接获取UTC时间,无需转换。

  • 运行代码的服务器无关(或应该如此)。此外,无论如何,所有 Azure 实例的本地时区都设置​​为 UTC,因此您不会看到爱尔兰本地时区的任何影响。

  • 是的,"Romance Standard Time"是丹麦本地时间的正确 Windows 标识符。如果您在非 Windows 平台上运行,则应使用 "Europe/Copenhagen"反而。如果您正在为多平台使用而编写,请使用 "Europe/Copenhagen"和我的TimeZoneConverter library .

  • 如果您只是想编写更短的代码,您可以执行以下操作:

      DateTime danish = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(universal, "Romance Standard Time");

    我说可能,因为只有在 DateTime 时这才是正确的。你的 universal 里有变量有其 Kind属性设置为DateTimeKind.Utc 。如果您之前使用DateTime.SpecifyKind进行了设置,那么这就会起作用。另一方面,如果您刚刚从数据库中检索到该值,则默认情况下 Kind将通过DateTimeKind.Unspecified 。主要区别在于ConvertTimeFromUtc款待DateTimeKind.Unspecified就好像它是 DateTimeKind.Utc ,而ConvertTimeBySystemTimeZoneId款待DateTimeKind.Unspecified就好像它是 DateTimeKind.Local .

    也就是说,如果你不设置Kind明确地,它将从本地时间转换为丹麦时间。 但是,由于 Azure 将其本地时区运行为 UTC,因此您会得到相同的结果。只是您在其他地方运行时可能会得到不同的结果。

  • 您可以考虑使用DateTimeOffset而不是DateTime 。这通常会产生更清晰的代码和更少的错误。 ( DateTimeKind 不与 DateTimeOffset 一起使用。)当然,这取决于您使用这些数据的具体用途,但通常这是一个好主意。

关于您提出的替代方案,我不建议。你原来的代码更好。我对每个问题的想法:

Alternative 1: I convert date to danish, before I save in my database in Ireland.

这取决于您代表什么。

  • 如果这是一个独特的时间点(发生某件事的时间,通常是过去的时间) - 那么您应该将其保留为 UTC。这允许正确转换到任何时区。

  • 另一方面,如果您表示某件事计划发生的时间(将来),那么通常情况下本地时间最重要。这对于采用 DST 的时区中重复发生的事件或可能波动的时区中的事件(政府频繁进行临时通知更改)尤其重要。

Alternative 2: There are one timezone between Denmark and Ireland, so I could: danish = dateTime.AddHours(1), but perhaps it could give errors with the summer and winter time.

您不应通过增加或减少时间来调整时区。毕竟 - 你不是在谈论 future 一小时或过去一小时的不同时间点。

此外,丹麦和爱尔兰今天可能很相似,但这并不意味着它们一直都是这样,也不意味着它们将来一定会保持这种状态。爱尔兰有不同的时区标识符(Windows 上为 "GMT Standard Time",其他平台上为 "Europe/Dublin")。

关于c# - 从爱尔兰的服务器获取丹麦的本地日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58595050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com