我需要以不同的文化格式转换DateTime
值,无论系统中设置什么。
没有选择任何特定的TimeZone进行转换,任何文化格式都使用转换DateTime值。
DateTimeFormatInfo ukDtfi = new CultureInfo(CultureInfo.CurrentCulture.ToString(), false).DateTimeFormat;
StartingDate = Convert.ToDateTime(System.Web.HttpContext.Current.Session["StartDate"].ToString(), ukDtfi);
我正在使用上面的代码,但它无法正常工作。
目前我在我的系统中设置了ar-SA
文化。
答案 0 :(得分:3)
首先让我清楚一些主题..
DateTime
实例没有任何时区信息和文化设置。 只是有日期和时间值。当您获得 textual (字符串)表示时,文化设置概念仅适用。
由于您使用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);
答案 1 :(得分:0)
尝试解决您的问题:
string myTime = DateTime.Parse("01/02/2016")
.ToString(CultureInfo.GetCultureInfo("en-GB").DateTimeFormat.ShortDatePattern);