根据c#中的文化转换(更改)当前日期时间

时间:2015-11-02 21:19:38

标签: c# datetime culture

if (!IsPostBack && !Page.IsCallback)
{
    double OffsetHrs = GetTimeZoneOffsetFromCookie();
    string dateFormat = ServiceManager.LocalizationService.GetString("AppHeaderTop", "DateFormat", "g");
    CultureSelected CultureSelected = GetCultureSelected();
    ASPxLabelCurrentTime.Text = DateTime.Now.ToUniversalTime().AddHours(-OffsetHrs).ToString(dateFormat);                
if (CultureSelected.CultureCode != "en-US") 
{
    DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat;
    DateTimeFormatInfo currentDtfi = new CultureInfo(CultureSelected.CultureCode, false).DateTimeFormat;
    ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi).ToString(currentDtfi.ShortDatePattern); //what can i Use here ?
}               

说出ASPxLabelCurrentTime.Text的输出  en-US文化是11/2/2015 4:14 PM (70) 如果我选择特定的文化,我希望此日期时间11/2/2015 4:14 PM (70)以特定的文化格式显示。

1 个答案:

答案 0 :(得分:1)

你的问题似乎不清楚,但我试着试一试。

首先,这(70)究竟是什么?这是从哪里来的? en-US culture 无法解析此字符串,而不使用ParseExactTryParseExact方法的字符串文字分隔符。另一方面,由于您正在ASPxLabelCurrentTime.Text DateTime.Now.ToUniversalTime().AddHours(-OffsetHrs).ToString(dateFormat)代码的结果,我不相信此(70)部分确实是一个问题这个问题。

第二,如果我清楚地理解,问题似乎是使用DateTime.ToString(string)方法。

ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi)
                                   .ToString(currentDtfi.ShortDatePattern);
                                    // ^^^ Problem seems here

Okey让我们说成功解析ASPxLabelCurrentTime.Text usDtfi文化(en-US),与此.ToString(string)方法,您实际上没有使用currentDtfi设置,当您生成DateTime的格式化字符串表示时,您正在使用CurrentCulture设置。

来自DateTime.ToString(String) doc;

  

将当前DateTime对象的值转换为其等效值   使用指定格式和格式的字符串表示   当前文化

由于我们不知道GetCultureSelected方法究竟返回什么,因此可能可能currentDtfi不同

强烈怀疑,你可以解决这个问题,将 文化作为ToString方法中的第二个参数作为;

ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi)
                                   .ToString(currentDtfi.ShortDatePattern, currentDtfi);

如果此(70)确实是您字符串的一部分,则需要使用ParseExactTryParseExact方法提供相应的格式。

string s = "11/2/2015 4:14 PM (70)";
DateTime dt;
if(DateTime.TryParseExact(s, "MM/d/yyyy h:mm tt '(70)'", CultureInfo.GetCultureInfo("en-US"),
                          DateTimeStyles.None, out dt))
{
    ASPxLabelCurrentTime.Text = dt.ToString(currentDtfi.ShortDatePattern, currentDtfi);
}