如何在"yyyyMMddThhmmss.000GMT"中逃脱格林尼治标准时间?



我使用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);

相关内容

  • 没有找到相关文章

最新更新