首页 > 解决方案 > 将英国格式的字符串 DateTime ("dd/MM/yyyy") 转换为文化可能发生变化的有效 DateTime

问题描述

我的应用程序只接收“dd/MM/yyyy”格式的字符串,它必须将这些字符串转换为有效的日期时间,这取决于运行应用程序的机器的文化(美国、英国等)。如果我的应用程序在美国文化机器上运行,则使用 TryParseExact 方法从字符串到有效日期时间的转换失败,因为它正在接收英国格式字符串并尝试解析为美国字符串。

如何将英国格式“dd/MM/yyyy”的字符串解析为有效的日期时间,该日期时间的格式取决于文化信息。例如,“MM/dd/yyyy 如果它在美国机器上?我遇到的麻烦比我想象的要多。谢谢

var culture = CultureInfo.CurrentCulture;
string format = culture.DateTimeFormat.ShortDatePattern;

DateTime RequestFrom;
DateTime RequestTo;
DateTime.TryParseExact("01/12/2019", format, culture, DateTimeStyles.None, out RequestFrom);
DateTime.TryParseExact("19/12/2019", format, culture, DateTimeStyles.None, out RequestTo);

标签: c#datetimedatetime-formatcultureinfotryparse

解决方案


方法 1 - 您可以ParseExact通过给出输入格式来使用

string inputdate = "01/12/2019";
var date = DateTime.ParseExact(inputdate, "dd/MM/yyyy", CultureInfo.InvariantCulture);

方法 2 - 如果您有多种输入格式,您可以使用TryParseExact

string inputdate = "01/12/2019";
DateTime dateTime = ParseDate(inputdate )

private static DateTime ParseDate(string providedDate)
{
    DateTime validDate;
    string[] formats = { "dd/MM/yyyy", "dd.MM.yyyy" };
    var dateFormatIsValid = DateTime.TryParseExact(
        providedDate,
        formats,
        CultureInfo.InvariantCulture,
        DateTimeStyles.None,
        out validDate);
    return dateFormatIsValid ? validDate : DateTime.MinValue;
}

推荐阅读