2017-06-06 94 views
0

所以,我有一個DateTime值,我需要呈現出來使用AR-SA文化(使用公曆)。如何正確渲染AR-SA的日期和時間字符串

我想使用的格式是DD-MMM-YYYY HH:MM。

我使用這個目前正在對其進行格式化 -

dateTimeValue.ToString("dd-MMM-yyyy HH:mm", culture) 

在EN-GB,我會看到 -

06 - 2017年16:49

在ar-SA中,當我使用相同的方法時,我看到 -

06-يونيو-2017 16:49

現在,從我能解決的問題來看,我認爲這是導致問題的RTL字符串,因爲它總是在右側。

如何在RTL中正確呈現此日期?

+0

你有什麼期待* *看,爲什麼? (再加上確保明確你打算在哪裏顯示HTML,控制檯,WinForm,WPF,調試器等字符串......) –

+0

嗯......用'ar-SA',一天應該是'11', 1438'。默認情況下,它使用'UmAlQuaraCalendar',而不是'GregorianCalendar'。你是否以某種方式改變了文化?請在此顯示,以便我們重現問題。 (但是,是的,我看到阿拉伯語文本被'MMM'推向右邊,仍然在看) –

+2

你是如何渲染字符串的?在某種類型的桌面UI應用程序控制中?在一個網頁?它可能更多的是如何渲染一個帶有混合rtl/ltr文本的字符串,然後如何生成字符串。 –

回答

0
var dt = DateTime.Parse("31/1/2016 12:00 AM", CultureInfo.GetCultureInfo("ar-SA")); 
// Throws FormatException 

而且因爲這種文化使用ص爲AMDesignator,因爲它使用UmAlQuraCalendar而不是一個GregorianCalendar你無法分析該字符串AR-SA文化。

您可以使用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); 

參考here。有人遇到同樣的問題,或多或少,這似乎解決了錯誤。希望這可以幫助。

以使其去看看herehere。他們似乎與渲染有類似的問題,可能能夠解決您的問題。

+0

謝謝,但我得到的問題不是解析,而是渲染。我已將日期存儲爲DateTime對象 - 我需要知道如何在ar-SA RTL文化中呈現此日期 – evilbhonda

+0

已更新我的答案。 – fluffy

1

對,經過一番挖掘,我設法找到了一個可行的解決方案。

即使我的問題是關於最初AR-SA,它適用於任何從右到左的文化。

我結束了使用Unicode字符來明確說明部分字符串被留到右什麼,從右到左。

因此,使用常數 -

private const char LeftToRightCharacter = (char)0x200E; 
private const char RightToLeftCharacter = (char)0x200F; 

然後我就可以建立日期的字符串如下 -

if (culture.TextInfo.IsRightToLeft) 
{ 
    return 
     LeftToRightCharacter + 
     date.ToString("yyyy-", culture) + 
     RightToLeftCharacter + 
     date.ToString("MMM", culture) + 
     LeftToRightCharacter + 
     date.ToString("-dd", culture); 
} 
return date.ToString("dd-MMM-yyyy", culture); 

...其中文化是的CultureInfo(與DateTimeFormat。日曆設置爲新的GregorianCalendar())並且日期是DateTime。

因此,對於日期06 - 2017年,在EN-GB我得到 -

06 - 2017年

和AR-SA我得到 -

2017-يونيو-06

現在,我已經得到了作爲一個字符串,我可以添加的T (左邊,如果培養物是RTL,右邊是培養物是LTR)。

這是看到的Unicode涉及這些字符與其他字符一起,我可以代替有用 - http://www.unicode.org/reports/tr9/

相關問題