从datetime获取小时部分和时区部分

时间:2012-08-21 05:04:59

标签: c#

我在配置文件中有一个字符串,用时区定义日期时间。 从配置文件中读取值时,我无法获得此值。

在配置文件中:

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,没有时区。

我想按原样阅读。还告诉我,如果我在配置文件中写日期时间的格式是正确的

4 个答案:

答案 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属性将反映它是当地时间。