3

我只是想将一串日期更改为 DateTime。

但是,当我尝试打印时,它总是说结果是5/31/20098:00:00 AM

知道为什么会发生这种情况吗?

namespace Test
{
    class Test
    {
        static void Main()
        {
            Parse("5/31/2009 12:00:00 AM" );
        }

        static readonly string ShortFormat = "M/d/yyyy hh:mm:ss tt";

        static readonly string[] Formats = { ShortFormat };

        static void Parse(string text)
        {
            // Adjust styles as per requirements
            DateTime result = DateTime.ParseExact(text, ShortFormat,
                                                  CultureInfo.InvariantCulture,
                                                  DateTimeStyles.AssumeUniversal);
            Console.WriteLine(result);
            Console.WriteLine(result);
        }
    }
}
4

6 回答 6

4

您需要使用DateTimeStyles.None或者DateTimeStyles.AssumeLocal如果您希望DateTime解析不考虑时区:

DateTime result = DateTime.ParseExact(text, ShortFormat,
                                      CultureInfo.InvariantCulture,
                                      DateTimeStyles.None);

当您使用DateTimeStyles.AssumeUniversal自动时区转换时,会针对计算机时区进行。

请参阅文档

AssumeUniversal - 如果在解析的字符串中未指定时区,则假定该字符串表示 UTC。

于 2012-05-14T12:22:30.363 回答
2

我认为您需要编写MM/dd/yyyy hh:mm:ss tt日期格式。

于 2012-05-14T12:09:57.540 回答
1

为了以DateTime指定的格式打印 a,您需要使用该ToString方法。像这样。

result.ToString("M/d/yyyy hh:mm:ss tt");

第二个参数 ( format) 定义了字符串 ( S) 必须采用的格式才能对其进行解析。

于 2012-05-14T12:11:11.633 回答
0

所有 DateTime 格式都在此处此处进行了描述。你应该改用

static readonly string ShortFormat = "MM/dd/yyyy hh:mm:ss tt";
于 2012-05-14T12:10:17.277 回答
0

将短格式更改为

static readonly string ShortFormat = "MM/dd/yyyy hh:mm:ss tt";

你的字符串代表这个

"05/31/2009 12:00:00 AM"
"MM/dd/yyyy hh:mm:ss tt"

上面的数字对应下面的格式

于 2012-05-14T12:10:32.033 回答
0

这取决于您的时区,我认为您的时区是 GMT+4 而不是 bukko 回答的 GMT-4。无论如何,只需使用:

DateTimeStyles.AssumeLocal

代替:

DateTimeStyles.AssumeUniversal
于 2012-05-14T12:30:00.000 回答