提问人:Anup Shah 提问时间:8/18/2021 最后编辑:Anup Shah 更新时间:8/18/2021 访问量:319
具有不同区域性的 DateTime.TryParse
DateTime.TryParse with different culture
问:
我有两个日期,如下所示,我的当地文化是“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 区域性”则相同
所以想问这是否是正确的做法?还是有其他解决方法?
答:
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
如果你没有足够的代表来发表评论,那就去找一些代表吧。你只需要几分,所以应该只需要几分钟。
评论
01-02-2021