簡體   English   中英

根據C#中的區域性轉換(更改)當前的DateTime

[英]Convert(change) current DateTime as per culture in c#

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輸出為ASPxLabelCurrentTime.Text 11/2/2015 4:14 PM (70)如果選擇特定的文化,我希望此日期時間為11/2/2015 4:14 PM (70)在其中顯示具體的文化格式。

您的問題似乎不清楚,但我嘗試嘗試一下。

首先,這(70)到底是什么? 這是哪里來的 在不使用帶有ParseExactTryParseExact方法的字符串文字定界符中的情況下, en-US文化無法解析此字符串。 另一方面,由於您將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假設您使用usDtfi區域性( en-US )成功解析了此ASPxLabelCurrentTime.Text但是使用此.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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM