我使用JsonConverter
属性设置datetime
格式,但对于字符串"yyyyMMddThhmmss.000GMT"
由于后一个M,我得到了类似"19900321T20000.000G3T"
的日期。如何在格式字符串中转义这些字符?
您可以使用:
"yyyyMMdd'T'HHmmss'.000GMT'"
我把hh
改成了HH
,因为大多数(理智的(人都使用24小时计数。
在文档"自定义日期和时间格式字符串"中,可以看到像'string'
中的aopstrophe字符可以用于文本字符串分隔符。现在,为了清楚起见,我还将T
放在这个分隔符中,即使一个大写T
在DateTime格式字符串中没有其他含义。
使用单引号转义,如:
"yyyyMMddThhmmss'.000GMT'"
类似:
string str = "19900321T20000.000GMT";
DateTime dt = DateTime.ParseExact(str,"yyyyMMddTHHmms'.000GMT'", CultureInfo.InvariantCulture);
将hh
更改为HH
,持续24小时,而且您的秒数似乎是个位数,因此使用单个s
。
(我假设在您的问题原始字符串中您有GMT
,而不是G3T
(
您有两个选项可以在自定义日期和格式字符串中使用...GMT
部分作为字符串文字分隔符:
".000GMT"
'.000GMT'
但我建议使用单引号,因为如果使用双引号,则需要使用对引号进行转义(因为转义序列(,或者可以使用逐字逐句的字符串文字。
对字符串中的T
中间部分也执行同样的操作。
还要使用HH
说明符,它代表24小时时钟,并使用s
说明符而不是ss
,因为T
后面有5
数字,这就是它不接受HHmmss
格式的原因。
你得到G3T
的原因是因为M
具有自定义字符串格式的月份的含义,这就是为什么你的GMT
被解析为G3T
的原因。
string s = "19900321T20000.000G3T";
var dt = DateTime.ParseExact(s, "yyyyMMdd'T'HHmms'.000G3T'",
CultureInfo.InvariantCulture);
带有双引号;
string s = "19900321T20000.000G3T";
var dt = DateTime.ParseExact(s, "yyyyMMdd"T"HHmms".000G3T"",
CultureInfo.InvariantCulture);