DateTime解析问题(DateTime.ParseExact)

时间:2010-12-14 13:31:56

标签: c# asp.net asp.net-mvc asp.net-mvc-2

[请投票结束此事 - 请参阅我的上一条评论。]

您好,

这样的事情:

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”。我将服务器的时区调整到英国无济于事。我还可以做些什么?感谢和抱歉所有这些混乱!!!

3 个答案:

答案 0 :(得分:5)

  

像这样的东西

你最好发布完全失败的内容,以及确切的错误,而不是“类似”失败的内容。

我希望您的示例提供FormatException,因为您要转换的字符串(“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"));

答案 1 :(得分: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);

答案 2 :(得分:1)

尝试

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