C# 分析日期时间dd/MM/yyyy hh:MM:ss tt(具有动态输入)时发生崩溃

C# 分析日期时间dd/MM/yyyy hh:MM:ss tt(具有动态输入)时发生崩溃,c#,.net,date,datetime,C#,.net,Date,Datetime,这里有我的代码,它将字符串解析为日期时间 DateTime datenew = DateTime.Parse("05/06/2015 17:18:12"); String convertDate = datenew .ToString("MM/dd/yyyy hh:mm:ss tt"); 此解析自动将时间16:13:12转换为05:18:12 PM。 在我输入dd/MM/yyyy格式之前,这一切都很顺利(顺便说一句,这与hh:MM:ss tt或hh:MM:ss无关,这无关紧要)。它抛出一个异常

这里有我的代码,它将
字符串
解析为
日期时间

DateTime datenew = DateTime.Parse("05/06/2015 17:18:12");
String convertDate = datenew .ToString("MM/dd/yyyy hh:mm:ss tt");
此解析自动将时间
16:13:12
转换为
05:18:12 PM
。 在我输入dd/MM/yyyy格式之前,这一切都很顺利(顺便说一句,这与hh:MM:ss tt或hh:MM:ss无关,这无关紧要)。它抛出一个异常

例如,我输入
18/02/2015 17:18:12
,现在它抛出一个错误

我希望我的输入是动态的,无论是
dd/MM/yyyy
还是
MM/dd/yyyy
格式。我只需要
MM/dd/yyyy hh:MM:ss tt
格式的标准输出

有什么建议吗

编辑


我想在这里暗中试探一下,我猜它不起作用,因为它不知道日期应该是什么格式


请看前两个例子,它们解释了如何设置文化或风格

我想在这里暗中试探一下,我猜它不起作用了,因为它不知道日期应该是什么格式


请看前两个例子,它们解释了如何设置文化或风格

根据我的评论,在解析日期之前,您需要确定日期的格式。在何处定义此格式取决于您

void Main()
{
    var format = GetFormat();
    var input = "05/06/2015 17:18:12";
    var parsedDate = DateTime.ParseExact(input, format, CultureInfo.InvariantCulture);
    var output = parsedDate.ToString("MM/dd/yyyy hh:mm:ss tt");
}

string GetFormat()
{
    //Take this from their user, client, file name, etc, etc.
    //Where this is configured doesn't really matter - but it needs to be somewhere.

    if (client.IsAmerican)
    {
        return "MM/dd/yyyy HH:mm:ss";
    } else {
        return "dd/MM/yyyy HH:mm:ss";
    }
}

根据我的评论,在解析日期之前,您需要确定日期的格式。在何处定义此格式取决于您

void Main()
{
    var format = GetFormat();
    var input = "05/06/2015 17:18:12";
    var parsedDate = DateTime.ParseExact(input, format, CultureInfo.InvariantCulture);
    var output = parsedDate.ToString("MM/dd/yyyy hh:mm:ss tt");
}

string GetFormat()
{
    //Take this from their user, client, file name, etc, etc.
    //Where this is configured doesn't really matter - but it needs to be somewhere.

    if (client.IsAmerican)
    {
        return "MM/dd/yyyy HH:mm:ss";
    } else {
        return "dd/MM/yyyy HH:mm:ss";
    }
}


你能发布它抛出的异常消息吗?@GrantWinney指出,编写代码试图猜测日期的格式几乎总是一个坏主意。选择所需的格式并坚持使用。@DmitryK。请参阅编辑后的帖子:)@GrantWinney-当我将输入更改为18/02/2015 17:18:12时发生了这种情况,但05/06/2015 17:18:12工作正常。问题是当我输入18/02/2015 17:18:12时。@WhiteMark是的,05/06“工作正常”,但它仍然可能是错误的。提供“2015年2月18日”格式的人显然使用了“dd/MM/yyyy”-这意味着,如果他们发送给你“2015年6月5日”,他们的意思是6月5日,但你会读到5月6日。你能发布它抛出的异常消息吗?正如@grantwiney指出的,编写试图猜测日期格式的代码几乎总是一个坏主意。选择所需的格式并坚持使用。@DmitryK。请参阅编辑后的帖子:)@GrantWinney-当我将输入更改为18/02/2015 17:18:12时发生了这种情况,但05/06/2015 17:18:12工作正常。问题是当我输入18/02/2015 17:18:12时。@WhiteMark是的,05/06“工作正常”,但它仍然可能是错误的。提供“2015年2月18日”格式的人显然使用了“dd/MM/yyyy”-这意味着,如果他们发送给您“2015年6月5日”,他们的意思是6月5日,但您会将其解读为5月6日。我认为DateTime.Parse只接受MM/dd/yyyy格式?IDK如果输入为dd/MM/yyyy,如何使用此选项。因为我需要用自定义格式解析datetoString。有什么想法吗?我想DateTime.Parse只接受MM/dd/yyyy格式?IDK如果输入为dd/MM/yyyy,如何使用此选项。因为我需要用自定义格式解析datetoString。有什么想法吗?好的。我现在明白了。我想我们现在站在同一边了。但是,如果我已经收到2015年6月5日下午5:18:12的输入,我该如何处理呢?@WhiteMark这很好,只要你知道发件人使用的格式。如果你不知道格式,就不可能知道它是什么日期。你只能猜测。所以如果捕获到另一种日期格式,我的程序有可能崩溃?啊!呵呵!谢谢你,罗布!很有帮助。@WhiteMark不用担心!是的,如果他们使用不同的格式,它将崩溃,尽管在我看来,最好是在错误数据上失败,而不是默默地接受它(并且让它出错):)好的。我现在明白了。我想我们现在站在同一边了。但是,如果我已经收到2015年6月5日下午5:18:12的输入,我该如何处理呢?@WhiteMark这很好,只要你知道发件人使用的格式。如果你不知道格式,就不可能知道它是什么日期。你只能猜测。所以如果捕获到另一种日期格式,我的程序有可能崩溃?啊!呵呵!谢谢你,罗布!很有帮助。@WhiteMark不用担心!是的,如果他们使用不同的格式,它将崩溃,尽管在我看来,最好是在错误数据上失败,而不是默默地接受它(并且让它出错):)