字符串无法识别为有效的日期时间

5
我在以下代码中收到了这个错误信息 "String was not recognized as a valid DateTime":

DateTimeOffSet dt=new DateTimeOffset(Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy hh:mm tt")));

在开发环境下它可以运行,但是在生产环境下却不能。

请问有人能指出上述代码存在什么问题吗?

谢谢。


1
服务器上的文化是否与工作站上的不同? - Rex M
是的,我认为开发服务器托管在本地,而生产服务器则托管在海外数据中心。 - Nil Pun
3个回答

8

Convert.ToDateTime 使用当前区域设置信息来处理 DateTime 格式。 可以尝试以下代码:

string format = "dd/MM/yyyy hh:mm tt";
string stringDate = DateTime.Now.ToString(format, CultureInfo.InvariantCulture);
DateTime dateTime = DateTime.ParseExact(stringDate, format, CultureInfo.InvariantCulture);

谢谢@Ivan。不确定 "CultureInfo.InvariantCulture" 是做什么的。我的要求是获得新西兰时间和日期。 - Nil Pun
假设您有格式“dd/MMMM/yyyy”。那么您的日期需要知道如何解析完整的月份名称 - 例如June,Июнь或Juin。此外,'/'符号不是字面意义上的 - 它是日期分隔符。对于美国,它确实是'/',而对于俄罗斯,则是'.'。所有这些细节都来自IFormatProvider。InvariantCulture确保在服务器上设置文化时,转换可以双向进行。 - Ivan Danilov
仍然显示当前本地时间 :-( 控制台.写(dateTime.ToString(format,culture)); - Nil Pun
你想在德国时区看到这个时间吗?问题是您的格式没有时区信息,因此解析后DateTime.Kind=Unspecified。所以当您从中构造DateTimeOffset时,它会回退到本地时区。 我现在不确定我是否理解了您的目标... - Ivan Danilov
当我在我的“de-DE”框上尝试时,我得到的是“14.06.2011 04:46”,这绝对不是我的本地格式。请注意日期分隔符为“.”,没有AM/PM。 - Ivan Danilov
显示剩余6条评论

1
为什么要从 DateTime 转换为 string,然后再转回 DateTime
我认为这样应该没问题:
DateTimeOffset dt = new DateTimeOffset(DateTime.Now);

抱歉,如果问题中的代码片段只是为了说明问题,请告诉我,我会进行修订。 - rsbarro
谢谢@sbarro,我不得不转换为ToString来格式化日期为dd/MM/yyyy hh:mm tt。这是我的要求。 - Nil Pun

0

在这两种机器上,CultureInfo 必须是不同的。你可能需要将它作为首选文化传递到 Convert 方法中。

例如:En-US。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接