将“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");
数据时间格式 无法识别,某些系统中的非大小写字符由于其内部设置。 请参考下面的代码,它工作正常
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
"
让我解释一下为什么你会得到这个结果。由于没有自定义的日期和时间格式,如YYYY
、DD
、SSS
或Z
,这些字符被原封不动地复制到结果字符串中。
我强烈怀疑你想使用yyyy
、dd
、fff
和z
格式说明符。
您可以使用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")