将“M / d / yyyy h:mm:ss tt”转换为“YYYY-MM-DDThh:mm:ss.SSSZ”

时间:2014-12-26 10:45:26

标签: c# string datetime

正如标题所示,我想要做的是转换我的日期字符串,例如

  • "6/6/2014 12:24:30 PM" (M/d/yyyy h:mm:ss tt)格式

  • "YYYY-MM-DDThh:mm:ss.SSSZ"格式。

我正在尝试以下方式。它没有给我任何例外,但我得到的价值如下:

  • "YYYY-06-DDT12:24:30.SSSZ"

我怎样才能真正做到这一点?

string LastSyncDateTime = "6/6/2014 12:24:30 PM";
DateTime dt = DateTime.ParseExact(LastSyncDateTime, "M/d/yyyy h:mm:ss tt",CultureInfo.InvariantCulture);
string result = dt.ToString("YYYY-MM-DDThh:mm:ss.SSSZ");

7 个答案:

答案 0 :(得分:3)

  

但我得到的价值就像" YYYY-06-DDT12:24:30.SSSZ"

让我解释一下为什么你会得到这个结果。由于YYYYDDSSSZ没有custom date and time format,因此会将这些字符复制到结果字符串不变

我强烈怀疑您想要使用yyyyddfffz格式说明符。

您可以使用DateTime.TryParseExact method之类的;

string s = "6/6/2014 12:24:30 PM";
DateTime dt;
if(DateTime.TryParseExact(s, "M/d/yyyy hh:mm:ss tt",
                          CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt.ToString("yyyy-MM-ddThh:mm:ss.fffz"));
}

这里有 demonstration on Ideone

我的计算机上的结果为2014-06-06T12:24:30.000+3,因为我的时区现在是UTC +3。时区信息可能也会根据您的UTC值进行更改。

答案 1 :(得分:2)

最简单的方法是使用"o"日期格式化程序,如下所示:

dt.ToString("o");

此方法将为您提供ISO 8601格式的时间段,如下所示:

2014-12-25T11:56:54.9571247Z

但是,由于ISO 8601使用超过3个十进制数字来定义第二个,如果您只想停在毫秒,则可以使用完整的格式化字符串和最后写下ss.fffzzz,如下所示:

dt.ToString("yyyy-MM-ddThh:mm:ss.fffzzz");

,结果将是:

2014-12-25T11:56:54.957Z

有关更多信息,您可以参考THIS LIST日期格式选项。

答案 2 :(得分:2)

数据时间格式由于内部设置,无法识别某些系统中的非区分大小写字符。请参考以下代码,该工作正常

string result = dt.ToString("yyyy-MM-ddThh:mm:ss.SSSZ");

以上代码将显示为2014-06-06T12:24:30.SSSZ

编辑:

下面的代码片段也会给你几毫秒

dt.ToString("yyyy-MM-ddThh:mm:ss.fffZ");

答案 3 :(得分:1)

试试这个 -

dt.ToString("o"); dt.ToString("O");

你可以看到这个link

希望这会有所帮助

答案 4 :(得分:1)

您可以使用以下格式的日期:(“ yyyy-MM-ddThh:mm:ss.000Z ”)

或者通过更改时区手动,您可以在设置选项卡中轻松使用日期设置时区( GMT:000(格林威治标准时间)),并确保数据类型为日期/时间。

答案 5 :(得分:0)

使用yyyy表示年份,dd表示日期

  string result = dt.ToString("yyyy-MM-ddThh:mm:ss.SSSZ");

答案 6 :(得分:0)

这是快速解决方案:

DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:ss.fffZ")