带时区的DateTime InvariantCulture
本文关键字:InvariantCulture DateTime 时区 | 更新日期: 2023-09-27 18:13:01
我在不同文化背景的计算机上使用DateTime。因此,我用ToString(CutureInfo.InvariantCulture)
保存DateTime,它可以在所有其他文化中轻松读取。格式类似于'01/19/2012 21:00:00'
。
但是我也想添加时区信息。是的,我可以指定像
这样的格式"MM/dd/yyyy hh:mm:ss+zzz".
但我的第一个想法是,是否有可能以某种方式将不变性文化与时区结合起来?
任何帮助将不胜感激!
几点:
-
时区和时区偏移量是两个不同的东西。你问的是关于补偿的问题。请参阅时区标签wiki了解更多信息。
-
由于您关心时区偏移量,您应该使用
DateTimeOffset
类型而不是DateTime
类型。 -
使用不变区域性是好的,但是您也应该使用一种明确的格式,因为
1/4/2016
可以很容易地表示1月4日或4月1日。不变文化将永远把它视为1月4日,因为它与美国的关系更紧密。但是,如果有人在美国以外的其他文化中读取该字符串,他们很容易混淆它。 -
您可能想要使用的格式是ISO8601扩展格式,带偏移量。这与RFC3339和W3C的DateTime注释中描述的格式几乎相同。在c#中,你可以使用
"o"
格式来轻松地实现这一点。DateTimeOffset.Now.ToString("o", CultureInfo.InvariantCulture)
谢谢你的澄清。是的,我指的是时区偏移。我还发现了新的DateTimeOffset类,它似乎可以很好地满足我的需求,但不确定,如果它涵盖了我所有的问题。
我有两个问题是-从保存在不变区域性中的字符串解析日期,但假设为本地且没有时区偏移。以后我将使用时区偏移来写这个,这样这个问题就会消失-日期也保存在SQLite中,它不支持时区偏移,因此偏移量在读取后消失。我将检查数据库模型是否可以扩展以保存时区偏移量或以字符串格式存储日期。
在DateTimeOffset类中,我不理解的是,Date属性是旧的DateTime类,允许它使用此属性将给定日期的时间设置为午夜。这需要在很多地方改变我的代码