2010-12-14 101 views
0

[请投票关闭这个 - 见我最后的评论]日期时间分析问题(DateTime.ParseExact)

嗨,

事情是这样的:

DateTime.ParseExact("25/12/2008 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

工作正常上我的开发机器,但部署后(服务器)。

我想它与一些时区配置有关。我曾尝试过:

<%@ ... UICulture="en" Culture="en-US" %> 

无济于事。请在明信片上提出任何建议。谢谢。

基督教

PS:异常:

字符串未被识别为有效的DateTime

PPS:我已经更新的问题。我实际上喂了一点时间。对于那个很抱歉!

PPPS: 我现在已经意识到,所有这些都与Excel和oledb有关。字符串25/12/2008在服务器上看起来像这个“12/25/2008 12:00:00 AM”,并且在开发机器上是这样的“25/12/2008 00:00:00”。我无意中将服务器的时区调整到了英国。我还可以做些什么?感谢所有这些困惑和遗憾!

+1

它以什么方式不能正常工作?意外的结果?例外?没有? – LukeH 2010-12-14 13:35:35

+1

值得注意的是,25/12/2008不适用于en-US的有效日期格式。这并不能解释本地和部署之间的差异,所以我会留下它作为评论。 – 2010-12-14 13:39:32

+1

带有“字符串未被识别为有效日期时间”的FormatException将是您样本的预期结果。“在您的开发机器上正常工作”的代码可能与您的示例不一样。 – Joe 2010-12-14 13:51:58

回答

4

像这样的事情

你会做的更好张贴究竟什么失败,以及确切的错误,而不是 “像” 什么失败。因为你要转换的字符串(“25/12/2008”,没有时间)与指定的格式不符(“dd/MM/yyyy hh:mm: SS“)。

在你的格式中使用hh而不是HH也有点奇怪 - hh是一个12小时的时钟。

我期望以下任何一项工作。

// No time component 
DateTime.ParseExact("25/12/2008", "dd/MM/yyyy", new CultureInfo("en-US")); 

// Works for hours <=12, result is always AM 
DateTime.ParseExact("25/12/2008 11:00:00", "dd/MM/yyyy hh:mm:ss", new CultureInfo("en-US")); 

// Works for hours using 24-hour clock 
DateTime.ParseExact("25/12/2008 13:00:00", "dd/MM/yyyy HH:mm:ss", new CultureInfo("en-US")); 
+0

我已添加PS。我找到了使用谷歌的...... – cs0815 2010-12-14 13:48:21

1

尝试

DateTime.ParseExact("25/12/2008", "dd/MM/yyyy hh:mm:ss", CultureInfo.InvariantCulture); 
+0

这不起作用,但比我目前做的更好。 – cs0815 2010-12-14 13:43:12

+1

如果它不起作用,它会更好吗? :) – 2010-12-14 13:44:54

+0

我的意思是CultureInfo.InvariantCulture位。 – cs0815 2010-12-14 13:48:57

3

在将字符串解析为DateTime时,请始终考虑日期可能有一位或两位数的日期和月份。例如,它可以是MM/dd/yyyy或M/d/yyyy或MM/d/yyyy或M/dd/yyyy。如果您使用ParseExact并且您不考虑这一点,则会发生异常。试试这个:

DateTime date = DateTime.ParseExact(
    dateText, // date in string 
    new string[] { "M/d/yyyy", "MM/dd/yyyy", "M/dd/yyyy", "MM/d/yyyy" }, // formats (you can add more) 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None);