如何逃避GMT" yyyyMMddThhmmss.000GMT"?

时间:2014-04-30 13:39:01

标签: c# json json.net

我使用JsonConverter属性来设置我的datetime格式,但是用于字符串 "yyyyMMddThhmmss.000GMT"由于后者,我得到"19900321T20000.000G3T"之类的日期。如何在格式字符串中转义这些字符?

3 个答案:

答案 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);