正如标题所示,我想要做的是转换我的日期字符串,例如
"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");
答案 0 :(得分:3)
但我得到的价值就像"
YYYY-06-DDT12:24:30.SSSZ
"
让我解释一下为什么你会得到这个结果。由于YYYY
,DD
,SSS
或Z
没有custom date and time format,因此会将这些字符复制到结果字符串不变
您可以使用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)
答案 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")