2017-06-06 63 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/

相关问题