2010-10-07 170 views
0

这工作:转换日期时间

testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", null); 

这并不:

string somedate = "16/10/2010"; 
testDateTime = DateTime.ParseExact(somedate, "dd/MM/yyyy", null); 

为什么?

+1

两者都适用于我 - 或者它至少是目前工作中的例子 - 所以会出现比问题中描述的更复杂的事情。 – Murph 2010-10-07 11:50:19

+1

您是否收到任何错误?如果是,那么错误是什么? – Shekhar 2010-10-07 11:51:40

+1

两者都适合我。什么是问题/错误? – CesarGon 2010-10-07 12:40:00

回答

0

出于某种原因,直到我说这个,也没有为我工作:CultureInfo.InvariantCulture

DateTime.ParseExact(S值, “DD/MM/YYYY”,CultureInfo.InvariantCulture);

2

这两个代码片段是绝对等效的,应该工作/不工作相同。我怀疑somedate变量的值不是你认为它在你的应用程序中。尝试调试。

0

当我尝试它时它工作正常......只是复制并粘贴它。

插入一个断点,将指针放在变量上并检查月,日和年的成员。如果他们不是权利,请告诉我们你看到了什么。

如果您正在使用打印或msgbox显示变量的值,也许您不会输出掩码/格式。

+0

但dateTime格式是一样的吗?对我来说,日期和月份切换:“16/10/2010”变成“10/16/2010”... – 2010-10-07 11:53:09

+0

您的意思是说您有16个月没有得到例外吗? – Jonathan 2010-10-07 12:02:54

+0

号码“dd/MM/yyyy”变成“MM/dd/yyyy”。 – 2010-10-07 12:04:59

0

当我尝试时,这两件事都适合我。你得到的错误是什么?

ParseExact()使用第二个参数来解析您的输入字符串,而不是以该格式返回值。

编辑:从下面乔的评论 - 你得到的将是在“MM/DD/YYYY”格式”输出 - 输出将不具有任何内在格式的DateTime类型

+1

“你得到的输出将是”MM/dd/yyyy“格式” - 输出将是没有任何固有格式的DateTime类型。 – Joe 2010-10-07 17:09:13

0

是你。试图改变日期时间格式吗?你不能用DateTime对象来做到这一点,只有当你使用String.Format显示DateTime对象时才能改变格式:String.Format(“{0:d/M/yyyy HH: MM:SS}”,DT)(例如或其他方法)

1

您的两个例子是等效的,如果你的当前区域性为en-US应该工作,但不一定在所有其他文化

例如,下面就因为去DE培养使用期限作为分隔符(二○一○年十月十六日)抛出出现FormatException:

System.Threading.Thread.CurrentThread.CurrentCulture = 
      CultureInfo.CreateSpecificCulture("de-DE"); 
DateTime testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", null); 

一般来说这是很好的做法(的FxCop会警告一下吧)始终指定IFormatProvider参数可用时:如果您正在解析来自当前用户的输入,则通常为CultureInfo.CurrentCulture;或者CultureInfo.InvariantCulture(如果您正在解析来自外部源的输入)。

// For input from the current user (16.10.2010 in Germany) 
testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", CultureInfo.CurrentCulture); 

// For input from an external source in a defined culture-invariant format 
testDateTime = DateTime.ParseExact("16/10/2010", "dd/MM/yyyy", CultureInfo.InvariantCulture);