1

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

在配置文件中:

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

4 回答 4

0

DateTime 不保留有关时区的信息。要解析字符串并保留有关时区的信息 - 您应该使用DateTimeOffset结构。

于 2012-08-21T05:18:06.020 回答
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, 
于 2012-08-21T05:18:36.937 回答
0

如果要存储时区信息,请使用DateTimeOffset结构(和)。DateTimeOffset.ParseExact

您的 ParseExact 格式也与设置值不完全匹配:它的末尾应该有一个 zz 用于时区信息。您也可以使用DateTimeOffset.Parse,因为您的设置字符串是标准格式。

于 2012-08-21T05:19:53.037 回答
0

这是一种标准格式,因此不需要 ParseExact,请尝试:

StartDate = DateTime.Parse(RoleEnvironment.GetConfigurationSettingValue("abcdefgh"));

我将您提供的硬编码值替换为我的时区 (GMT-4) 的正确结果

2012 年 8 月 11 日凌晨 2:00

注意:正如其他人提到的,时区不会保留,因此您将获得与字符串中的任何时区信息相对应的正确本地化时间,但您将无法找出那个时区。该DateTime.Kind属性将反映这是当地时间。

于 2012-08-21T05:35:23.420 回答