【发布时间】:2021-10-20 01:44:01
【问题描述】:
我有两个日期如下所示,并且我的当地文化是“en-IN”
string enInDateValue = "13-12-2021 12:00:00"; // dd/mm/yyyy
string enUSDateValue = "12-13-2021 12:00:00"; // mm/dd/yyyy
如果我使用 Invariant Culture 运行以下代码,则日期会使用 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 文化相同
所以想问一下这样做对不对?还是有其他办法?
【问题讨论】:
-
不,你需要事先知道格式。例如,您如何知道
01-02-2021是 2 月 1 日还是 1 月 2 日? -
那么 01/02/2021 是第二个中的第一个还是第一个中的第二个?你这里有一个更大的问题
-
@DavidG 打败了我,日期完全相同!
-
计算机不是魔法——唉,它猜不出意思。如果您有日期,则它们需要采用固定且定义明确的格式。
-
或者您需要将格式(文化)与日期一起存储
标签: c# .net datetime cultureinfo invariantculture