如何在不同的系统区域性中转换日期时间
本文关键字:区域性 转换 日期 时间 系统 | 更新日期: 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);