我使用JsonConverter
属性来设置我的datetime
格式,但是用于字符串
"yyyyMMddThhmmss.000GMT"
由于后者,我得到"19900321T20000.000G3T"
之类的日期。如何在格式字符串中转义这些字符?
答案 0 :(得分:2)
您可以使用:
"yyyyMMdd'T'HHmmss'.000GMT'"
我将hh
更改为HH
,因为大多数(理智)的人都使用24小时计数。
在documentation Custom Date and Time Format Strings上显示'string'
中的aoptrophe字符可用于文字字符串分隔符。现在我还将T
放在此分隔符中,只是为了清楚起见,即使一个大写T
在DateTime格式字符串中没有其他含义。
答案 1 :(得分:2)
使用单引号转义如下:
"yyyyMMddThhmmss'.000GMT'"
像:
string str = "19900321T20000.000GMT";
DateTime dt = DateTime.ParseExact(str,"yyyyMMddTHHmms'.000GMT'", CultureInfo.InvariantCulture);
将hh
更改为HH
24小时,您的秒数也会显示为单位数值,因此请使用单个s
。
(我在您的问题中假设原始字符串为GMT
,而不是G3T
)
答案 2 :(得分:2)
您可以使用...GMT
部分作为custom date and format string中的字符串文字分隔符使用2个选项:
".000GMT"
'.000GMT'
但我建议使用单引号,因为如果您使用双引号,则需要使用\
(因为escape sequence)转义引号,或者您可以使用verbatim string literal。
同样在字符串T
中间做同样的事情。
同时使用HH
说明符用于 24小时制并使用s
speficier而不是ss
,因为您之后有5
个数字T
这就是为什么它不接受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);