如何在不同的系统文化中转换DateTime?

时间:2016-02-01 09:00:17

标签: c# datetime culture

我需要以不同的文化格式转换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文化。

2 个答案:

答案 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);