在国际上准确处理夏令时之前的本地记录时间
Internationally dealing with prior local record times accurately with daylight savings
当前,记录以实际输入系统时的 UTC 格式存储。
我的任务是现在允许用户输入过去事件的记录,以及这些事件发生在他们本地的时间。
我的困境是不仅有不同的时区,而且在一年中的某些时期还有夏令时观察。
以图表格式准确报告个人事件是关键,所以我的问题是,如何向用户准确报告正确的日期?因为人们搬迁到不同的时区,同一个人可能会在不同的世界位置重温相同的日期和时间。
如何最好地存储这些事件并将其显示给用户?
表单数据通过 asp.net c# 网络应用程序输入并存储在 SQL 服务器数据库中。输入的时间和日期将始终是用户当地的日期和时间。
对于过去的单次事件,最简单的解决方案是在SQL服务器中使用datetimeoffset
字段存储,并在.NET中使用相应的DateTimeOffset
类型。 datetimeoffset
值的日期和时间部分反映了事件的本地时间,而偏移量反映了当时本地时间超前或落后 UTC 的距离。有关更多信息,请参阅 DateTime vs DateTimeOffset。
此方法不需要对 DST 进行任何额外补偿。由于它只出现一次,因此偏移量包括标准时间和当时有效的任何适用的夏令时。
棘手的部分是从 MVC 网站的用户那里收集准确的 DateTimeOffset
输入值。目前,还没有针对 DateTimeOffset
的简单内置控件。相反,您需要为 DateTime
显示一个输入框,并单独显示一个可能偏移量的下拉列表。我有一些演示代码 here that will show you how to generate that list. Use it to populate a dropdown, and you can let your user choose the offset. Hopefully this will eventually get merged into ASP.NET Core, so you'll just be able to bind to a DateTimeOffset
directly someday. Some discussion on this in aspnet/Mvc#6648.
当前,记录以实际输入系统时的 UTC 格式存储。
我的任务是现在允许用户输入过去事件的记录,以及这些事件发生在他们本地的时间。
我的困境是不仅有不同的时区,而且在一年中的某些时期还有夏令时观察。
以图表格式准确报告个人事件是关键,所以我的问题是,如何向用户准确报告正确的日期?因为人们搬迁到不同的时区,同一个人可能会在不同的世界位置重温相同的日期和时间。
如何最好地存储这些事件并将其显示给用户? 表单数据通过 asp.net c# 网络应用程序输入并存储在 SQL 服务器数据库中。输入的时间和日期将始终是用户当地的日期和时间。
对于过去的单次事件,最简单的解决方案是在SQL服务器中使用datetimeoffset
字段存储,并在.NET中使用相应的DateTimeOffset
类型。 datetimeoffset
值的日期和时间部分反映了事件的本地时间,而偏移量反映了当时本地时间超前或落后 UTC 的距离。有关更多信息,请参阅 DateTime vs DateTimeOffset。
此方法不需要对 DST 进行任何额外补偿。由于它只出现一次,因此偏移量包括标准时间和当时有效的任何适用的夏令时。
棘手的部分是从 MVC 网站的用户那里收集准确的 DateTimeOffset
输入值。目前,还没有针对 DateTimeOffset
的简单内置控件。相反,您需要为 DateTime
显示一个输入框,并单独显示一个可能偏移量的下拉列表。我有一些演示代码 here that will show you how to generate that list. Use it to populate a dropdown, and you can let your user choose the offset. Hopefully this will eventually get merged into ASP.NET Core, so you'll just be able to bind to a DateTimeOffset
directly someday. Some discussion on this in aspnet/Mvc#6648.