如何在不同的系统文化中转换日期时间?

Jee*_*att 3 c# culture datetime

我需要以DateTime不同的文化格式转换值,无论系统中设置什么。

没有选择任何特定的时区进行转换,任何区域性格式都使用转换日期时间值。

DateTimeFormatInfo ukDtfi = new CultureInfo(CultureInfo.CurrentCulture.ToString(), false).DateTimeFormat;
StartingDate = Convert.ToDateTime(System.Web.HttpContext.Current.Session["StartDate"].ToString(), ukDtfi);
Run Code Online (Sandbox Code Playgroud)

我正在使用上面的代码,但它无法正常工作。目前我ar-SA在我的系统中设置了文化。

Son*_*nül 5

让我先澄清一些主题..

\n\n

实例DateTime没有任何时区信息和区域性设置。它只有日期和时间值。文化设置概念在您获得文本时才适用字符串)表示形式时才适用。

\n\n

由于您使用ar-SA区域性,因此您的字符串格式不是区域性的标准日期和时间格式。

\n\n
var dt = DateTime.Parse("31/1/2016 12:00 AM", CultureInfo.GetCultureInfo("ar-SA"));\n// Throws FormatException\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且您无法使用区域性解析此字符串ar-SA,因为此区域性使用\xd8\xb5a AMDesignator,因为它使用UmAlQuraCalendar而不是 a GregorianCalendar

\n\n

您可以使用InvariantCulture( 它用作AMaAMDesignator并使用GregorianCalendar) 代替DateTime.ParseExact方法并准确指定其格式。

\n\n
string s = "31/1/2016 12:00 AM";\nDateTime dt = DateTime.ParseExact(s, "dd/M/yyyy hh:mm tt", \n                                  CultureInfo.InvariantCulture);\n
Run Code Online (Sandbox Code Playgroud)\n\n

在你的情况下;

\n\n
StartingDate = DateTime.ParseExact(System.Web.HttpContext.Current.Session["StartDate"].ToString(), \n                                   "dd/M/yyyy hh:mm tt", \n                                   CultureInfo.InvariantCulture);\n
Run Code Online (Sandbox Code Playgroud)\n