我在配置文件中有一个字符串,用时区定义日期时间。 从配置文件中读取值时,我无法获得此值。
在配置文件中:
Setting name="abcdefgh" value="2012-08-10T22:00:00-08:00"
在C#中,我的内容如下:
DateTime StartDate;
StartDate = DateTime.ParseExact(RoleEnvironment.GetConfigurationSettingValue("abcdefgh"), "yyyy-MM-dd HH:mm:ss", null);
Configuration.Instance.abcdefgh= StartDate;
在开始日期,我将于2012年8月11日11:30:00,没有时区。
我想按原样阅读。还告诉我,如果我在配置文件中写日期时间的格式是正确的
答案 0 :(得分:0)
DateTime不保留有关时区的信息。要解析字符串并保留有关时区的信息,您应该使用DateTimeOffset结构。
答案 1 :(得分:0)
MSDN链接至DateTimeOffset。
无论何时提到确切的点,都要使用DateTimeOffset 时间。例如,使用它来计算“现在”,交易时间,文件 更改时间,记录事件时间等。如果时区不是 已知,与UTC一起使用。这些用途比它更常见 首选DateTime的场景,因此应该考虑这一点 默认。
var date = DateTimeOffset.Parse("2012-08-10T22:00:00-08:00");
date.Offset // -08:00:00, offset from Coordinated Universal Time (UTC)
date.DateTime // 10/08/2012 22:00:00,
答案 2 :(得分:0)
如果要存储时区信息,请使用DateTimeOffset结构(和DateTimeOffset.ParseExact
)。
您的ParseExact格式也与设置值不完全匹配:它应该在末尾有一个zz用于时区信息。您也可以使用DateTimeOffset.Parse
,因为您的设置字符串是标准格式。
答案 3 :(得分:0)
这是标准格式,因此不需要ParseExact,请尝试:
StartDate = DateTime.Parse(RoleEnvironment.GetConfigurationSettingValue("abcdefgh"));
我替换了您提供的硬编码值,并为我的时区(GMT-4)获得了正确的结果
8/11/2012 2:00 AM
注意:正如其他人提到的那样,时区不会保留,因此您将获得与字符串中的时区信息相对应的正确本地化时间,但您将无法找到是什么时区。 DateTime.Kind
属性将反映它是当地时间。