如何在不同的系统区域性中转换日期时间

本文关键字:区域性 转换 日期 时间 系统 | 更新日期: 2023-09-27 18:32:46

我需要将DateTime值转换为不同的区域性格式,无论系统中设置什么。

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

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

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

如何在不同的系统区域性中转换日期时间

让我先清除一些主题。

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

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

var dt = DateTime.Parse("31/1/2016 12:00 AM", CultureInfo.GetCultureInfo("ar-SA"));
// Throws FormatException

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

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

string s = "31/1/2016 12:00 AM";
DateTime dt = DateTime.ParseExact(s, "dd/M/yyyy hh:mm tt", 
                                  CultureInfo.InvariantCulture);

在您的情况下;

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

尝试用这个来解决你的问题:

string myTime = DateTime.Parse("01/02/2016")
                        .ToString(CultureInfo.GetCultureInfo("en-GB").DateTimeFormat.ShortDatePattern);