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

本文关键字:ss mm 转换 YYYY-MM-DDThh SSSZ tt yyyy | 更新日期: 2023-09-27 18:35:16

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

  • "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");

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

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

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

上面的代码将产生2014-06-06T12:24:30.SSSZ

编辑:

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

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

最简单的方法是使用 "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

有关更多信息,您可以参考此日期格式选项列表。

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

让我解释一下为什么你会得到这个结果。由于没有自定义的日期和时间格式,如YYYYDDSSSZ,这些字符被原封不动地复制到结果字符串中。

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

您可以使用DateTime.TryParseExact方法,例如;

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 值而更改。

试试这个 -

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

你可以看到这个链接

希望这有帮助

您可以使用

此格式的日期:("yyyy-MM-ddThh:mm:ss.000Z")

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

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

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

以下是快速解决方案:

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