2015-11-02 97 views
0
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 ? 
}    

咱們說的en-US文化ASPxLabelCurrentTime.Text 輸出爲11/2/2015 4:14 PM (70) 如果我選擇特定的文化我想這個日期11/2/2015 4:14 PM (70)出現在特定的文化形式。轉換(改變)當前日期時間爲每文化在C#

+0

避免'Convert.ToDateTime',請改用'DateTime.ParseExact'。 – Dai

+0

如果我使用DateTime.ParseExact,我怎樣才能代表不同文化的「格式」。什麼可能是使用不同文化的語法.. ?? – virtualreality

+0

@virtualreality這取決於字符串和文化設置。例如,文化在PMDesignator屬性中必須是「PM」。 –

回答

1

你的問題似乎不清楚,但我試圖給一個鏡頭。

首先,這究竟是什麼(70)?這是從哪裏來的? en-US文化不能解析此字符串,而不使用它在與ParseExactTryParseExactTryParseExact方法的字符串文字分隔符中。另一方面,由於您在甄別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 

奧基讓我們說你成功地解析這個ASPxLabelCurrentTime.TextusDtfi文化(這是en-US),這種.ToString(string)方法,不使用currentDtfi設置實際上,你正在使用CurrentCulture設置時您生成格式化字符串代表您的DateTime

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); 
} 
+0

是的。正如你所說的問題在於ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text,usDtfi) .ToString(currentDtfi。ShortDatePattern); // ^^^問題似乎在這裏..................................當我使用它時,它是2015年11月3日上午9:14至2015年11月3日。時間沒有被展示......我們不必擔心(70)。 – virtualreality

+0

@virtualreality因爲你正在使用'CurrentCulture'的'ShortDatePattern',它是_only_顯示日期部分。你想要什麼,因爲你的'ASPxLabelCurrentTime.Text'完全是一個結果? –

+0

我想要類似03/11/2015 09:30 ... – virtualreality