具有不同区域性的 DateTime.TryParse

DateTime.TryParse with different culture

提问人:Anup Shah 提问时间:8/18/2021 最后编辑:Anup Shah 更新时间:8/18/2021 访问量:319

问:

我有两个日期,如下所示,我的当地文化是“en-IN”

string enInDateValue = "13-12-2021 12:00:00"; // dd/mm/yyyy
string enUSDateValue = "12-13-2021 12:00:00"; // mm/dd/yyyy

如果我使用固定区域性运行以下代码,则使用 enUSDate 解析日期。

DateTime.TryParse(enInDateValue, CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out result)
DateTime.TryParse(enUSDateValue, CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out result)

为了解决下面的问题,我正在使用代码,它正在解析每个区域性的日期。

public static bool DateTimeTryParse(string date, out DateTime result)
    {
        return (
            DateTime.TryParse(date, CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out result) ||
              DateTime.TryParse(date, CultureInfo.CurrentCulture, DateTimeStyles.NoCurrentDateDefault, out result) ||
              DateTime.TryParse(date, CultureInfo.CurrentUICulture, DateTimeStyles.NoCurrentDateDefault, out result)
        );
    }

如果它仅使用固定区域性失败,则它将转到“当前”,而对于“UI 区域性”则相同

所以想问这是否是正确的做法?还是有其他解决方法?

C# .NET DateTime CultureInfo invariantCulture

评论

1赞 DavidG 8/18/2021
不,您需要事先知道格式。例如,你怎么知道是 2 月 1 日还是 1 月 2 日?01-02-2021
4赞 TheGeneral 8/18/2021
那么 01/02/2021 是第二个中的第一个,还是第一个中的第二个?你在这里有一个更大的问题
0赞 TheGeneral 8/18/2021
@DavidG打败了期完全相同!
1赞 mjwills 8/18/2021
计算机不是魔法 - 它无法猜测含义,唉。如果您有日期,它们需要采用固定且定义明确的格式。
1赞 Camilo Terevinto 8/18/2021
或者,您需要将格式(区域性)与日期一起存储

答:

0赞 Gec 8/18/2021 #1

您需要显式指定预期的格式。这个小示例可能会有所帮助:

        string date1 = "12-13-2021";
        string date2 = "13-12-2021";

        string format1 = "MM-dd-yyyy";
        string format2 = "dd-MM-yyyy";

        DateTime parsedDate1, parsedDate2;

        bool success1 = DateTime.TryParseExact(date1, format1, null, DateTimeStyles.None, out parsedDate1);
        bool success2 = DateTime.TryParseExact(date2, format2, null, DateTimeStyles.None, out parsedDate2);

        if (success1)
            Console.WriteLine($"First date parsed successfully: {parsedDate1.ToString("yyyy,MMM,dd,ddd")}");
        else
            Console.WriteLine("First date failed to parse");

        if (success2)
            Console.WriteLine($"Second date parsed successfully: {parsedDate2.ToString("yyyy,MMM,dd,ddd")}");
        else
            Console.WriteLine("Second date failed to parse");

评论

0赞 DavidG 8/18/2021
如果你没有足够的代表来发表评论,那就去找一些代表吧。你只需要几分,所以应该只需要几分钟。