- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在爱尔兰的 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/
我的问题很奇怪,我应该显示以下字母 ø å Å Ø 但我看到了 øåÃ...ã, 这是我的代码: øåÅØ 这是
如何将区域设置 ID 转换为 Java 中的显示语言和国家/地区。例如,我有一个以下格式的语言环境列表:“da-DK”,我希望它们全部显示为“丹麦语(丹麦)”。 这是迄今为止我的代码: pub
我是一名优秀的程序员,十分优秀!