小编Amy*_*Amy的帖子

在C#/ .NET中格式化其他语言环境中的数字和日期

在我正在编写的应用程序中,我想用英语显示当前日期和时间,但也要在其他语言环境中显示.

例如俄语,阿拉伯语和中文.

// DateTime.ToLongDateString doesn't support a IFormatProvider parameter
DateTime.Now.ToString("dddd, d MMMM, yyyy", new CultureInfo("en-US"));
// "Wednesday, 7 August, 2013"

DateTime.Now.ToString("dddd, d MMMM, yyyy 'r.'", new CultureInfo("ru-RU"));
// "?????, 7 ???????, 2013 r."
Run Code Online (Sandbox Code Playgroud)

工作良好...

DateTime.Now.ToString("dddd? d MMM? yyyy", new CultureInfo("ar"));
// "????????? 30 ?????? 1434"
Run Code Online (Sandbox Code Playgroud)

似乎工作正常.

但是......我想将数字显示为(东方)阿拉伯数字,而不是拉丁文/阿拉伯数字.虽然这当然可以通过简单的替换('0'到'0',1到'1'等)来解决.

但后来有中文:

DateTime.Now.ToString("yyyy?M?d?dddd", new CultureInfo("zh-CN"))
// "2013?8?7????"
Run Code Online (Sandbox Code Playgroud)

中文数字似乎比仅仅做一个简单的替换要复杂得多; 有时一个字符变成2.在那旁边,格式化的日期似乎显示当前的格里高利日期,而不是当前的中国日期.

所以我的问题是:

A).NET/C#中是否有任何本地化功能可以在其他数字系统中显示数字(特别是日期)?

B)我可以强制.NET/C#在中文(可能还有日文和其他)日历中显示日期,因为它似乎与阿拉伯语日历有关吗?

.net c# localization digit

7
推荐指数
1
解决办法
3374
查看次数

合并多个列表

鉴于我有一个列表列表,其中所有列表包含0个或更多项,可能但不一定都是相同的数字.我希望有一个包含列表中所有项目的列表...但是我希望订单如下:首先是所有列表中的第一个项目,以便它们出现在"超级列表"中.List<List<T>>

防爆.

List[0] = { 'Apple', 'Blueberry', 'Cranberry' }
List[1] = { 'Anteater', 'Baboon', 'Camel', 'Dodo'}
List[2] = { 'Albatross', 'Blackbird', 'Chicken'}

result = { 'Apple', 'Anteater', 'Albatross', 'Blueberry', 'Baboon', 
           'Blackbird', 'Cranberry', 'Camel', 'Chicken', 'Dodo' }
Run Code Online (Sandbox Code Playgroud)

(请注意,这不是字母顺序,蓝莓来自狒狒之前)

当然,只要有一个非空的列表,我就可以通过计数器循环遍历'superlist',逐个将项添加到结果列表中:

int i = 0;
bool done = false;

while (!done)
{
    bool found = false;

    foreach (list l in superlist)
    {
        if (l.Count() > i)
        {
           found = true;
           result.Add(l[i]);
        }
    }

    i++;

    if (!found)
        done = true;
}
Run Code Online (Sandbox Code Playgroud)

但是使用一些优化的LINQ函数来做这件事会更好.我一直在研究 …

.net c# linq list

4
推荐指数
1
解决办法
327
查看次数

标签 统计

.net ×2

c# ×2

digit ×1

linq ×1

list ×1

localization ×1