[英]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)
到底是什么? 這是哪里來的 在不使用帶有ParseExact
或TryParseExact
方法的字符串文字定界符中的情況下, 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)
實際上是字符串的一部分,則需要使用ParseExact
或TryParseExact
方法來提供其確切格式。
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.