2015-10-20 75 views
-1

我一个DateTime转换为字符串使用自定义格式:不能往返日期时间格式

var s = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"); 

现在,当我试图扭转这种局面:

var dt = DateTime.ParseExact(s, "yyyy/MM/dd hh:mm:ss"); 

我得到的字符串的异常不有效的格式。我甚至试图通过CultureInfo.InvariantCulture,但没有运气。 任何想法?

+1

不能用不变的文化重现错误... –

+0

我不能重现这一点。如果你用正确的编程语言(即[tag:c#])标记你的问题,那么它也会很有用,因为.NET不是一种编程语言。 – cybermonkey

+1

由于'DateTime.ParseExact'没有一个需要两个字符串参数的覆盖,所以看起来你没有显示你的原始代码。一个问题是,你正在使用小时说明符hh而没有AM/PM指示符。尝试使用HH,或者添加AM/PM标志。 – Joe

回答

2

如果使用带一个参数的ToString方法,那么它使用CurrentCulture作为格式提供程序,可以将“/”符号更改为特定于您的文化(例如“。”)。 如果InvariantCulture的是你可以接受,尝试使用此代码:

var s = DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss", CultureInfo.InvariantCulture); 
var dt = DateTime.ParseExact(s, "yyyy/MM/dd hh:mm:ss", CultureInfo.InvariantCulture); 
+0

或者相反:使用''/''而不是普通的'/',总是使用斜线(所以''yyyy'/'MM'/'dd hh:mm:ss“') –

1

我错误地忘记了最后一个参数ParseExact,这是对子级CultureInfo.InvariantCulture。但最终,问题不是HH而是HH。