C# 检测格式日期

C# 检测格式日期,c#,datetime,C#,Datetime,有没有一种方法,一种好的方法,来测试我想在DateTime中转换的字符串是dd/MM/yyyy还是MM/dd/yyyyy 谢谢,没有,但您可以在解析时尝试这两种方法: DateTime result; if (DateTime.TryParseExact( "05/10/2010", new[] { "MM/dd/yyyy", "dd/MM/yyyy" }, CultureInfo.InvariantCulture, DateTimeStyles.None,

有没有一种方法,一种好的方法,来测试我想在
DateTime
中转换的字符串是
dd/MM/yyyy
还是
MM/dd/yyyyy


谢谢,

没有,但您可以在解析时尝试这两种方法:

DateTime result;
if (DateTime.TryParseExact(
    "05/10/2010",
    new[] { "MM/dd/yyyy", "dd/MM/yyyy" }, 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None, 
    out result)
)
{        
    // successfully parsed date => use the result variable
}

不,因为两者都有可能。2010年11月10日是11月10日还是10月11日

是的,在某些情况下(如果一个数字超过12),它将是明确的——但我认为最好强制使用一种格式或另一种格式。如果您只是将任何可以作为MM/dd/yyyy完成的事情这样处理,如果它失败(或者反过来),则转到dd/MM/yyyy,那么您将得到一些非常惊讶的用户

如果这是web应用程序或类似应用程序的一部分,我会尽可能使用月份名称而不是数字,以使其完全明确


在所有人接受并使用ISO方式之前,此问题将一直存在。我是一名瑞典程序员,经常与美国和英国客户打交道,要让这些客户使用标准化的日期格式非常困难


-用它

仅适用于明确的情况,否则将选择第一选择。(2010年10月5日可能是2010年10月5日或2010年5月10日)是的,可能会有歧义。强制确定,但显示是第一个发送到数据库的,是第二个。这基本上是一个不可能的问题,但大多数人希望在询问生日时输入一个简单的日期——1970年10月11日,而不是被迫说出一个月。我想您可以采用一种特定的格式,尽管是地理位置或其他格式,然后使用该格式和客户端脚本显示日期的长格式预览。@Kris-I:您根本不应该格式化
DateTime
以将其发送到数据库。您应该将其作为查询参数中的
DateTime
发送。这样你就不会把事情搞砸了。对于解析用户输入,只需使用
DateTime.TryParseExact
指定单一接受格式。当您知道TryParseExact时,为什么要使用ParseExact显示代码?如果只是想捕获异常并继续前进,就不应该使用ParseExact。更不用说这段代码会失败,因为TryParseExact()返回布尔值…@Pawel Dyda:但他没有使用TryParseExact,所以它不会失败。@jgauffin:在修改之前您还没有看到这段代码:)现在差不多可以了。我总是尽量使用iso日期格式。它们没有歧义。:)
string date1 = "24/12/2010";
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime dt1 = new DateTime(1, 1, 1);
bool dt1Valid = false;
try
{
    dt1 = DateTime.ParseExact(date1, "dd/MM/yyyy", provider);
    dt1Valid = true;
}
catch
{
    dt1Valid = false;
}