操作日期时间偏移到本地用户设置区域
本文关键字:用户 设置 区域 日期 时间 操作 | 更新日期: 2023-09-27 18:04:08
请告诉我处理这件事的方法是否正确。
我有一个web应用程序,我想显示本地化的动作datetime用户基于他的时区。
例如:用户x在这个日期创建了这个项目,用户y在这个日期修改了这个项目,等等。
是否可以将所有这些操作保存为DateTimeOffset
而不是DateTime
类型,当显示给用户时,将DateTimeOffset转换为用户本地时区?
首先,对于应用程序开发,DateTimeOffset优于DateTime。请参阅此MSDN页面:在DateTime, DateTimeOffset和TimeZoneInfo之间进行选择
第二,我想指出的是,如果你使用DateTime,你必须转换用户的输入DateTime数据到UTC之前保存它,所以你可以正确地转换为用户的本地时间稍后。如果使用DateTimeOffset,则不需要转换为UTC -只要确保Date和Time组件都存在即可。Date组件帮助确定夏令时是否在用户的时区生效。
你必须考虑到
虽然DateTimeOffset值包含一个偏移量,但它不是一个完整的时区感知的数据结构。而与UTC的偏移量为1作为时区的特征,它不能明确地标识一个时区。多个时区不仅共享相同的偏移量但是一个时区的偏移量在观察时发生变化夏令时。这意味着,只要一个DateTimeOffset值与其时区解关联,则不能再关联明确地链接回原来的时区
为什么不在保存到数据库之前使用DateTime .ToUniversalTime
,然后在检索数据以显示它时转换为用户本地格式?我认为这是一个更安全的选择。
我假设您将在执行操作时注册并存储日期和时间。每次有事情发生,我就把它们登记为DateTime.UtcNow
。
这样,您就可以确定什么时候实际发生了一些事情,而不必担心触发它的用户所在的时区。这将是第一步。然后,您可以开始考虑如何通过使用用户时区向用户显示它们的替代方案;这将更容易做到。对于这种国际化的时间问题,您也可以考虑看看像Noda time这样的api。