在订单中显示日期,而不管其所处的文化偏好

时间:2015-09-21 18:41:15

标签: c# .net date datetime

DateTimeFormatInfo us = new CultureInfo("en-US", false).DateTimeFormat;     
DateTimeFormatInfo cc = new CultureInfo(culturepreference, false).DateTimeFormat;
foreach (DataRow row in culturetable.Rows)
{
    DateTime dt = DateTime.Parse(row["date"].ToString()); 
    row["date"] = dt.ToString(cc.ShortDatePattern); 
} 

我使用上面的代码根据文化偏好显示日期。     **输出: 日期无序......

选择澳大利亚en-AU文化偏好时

1/09/2015
10/09/2015
11/09/2015
19/09/2015
2/09/2015
20/09/2015  
24/08/2015  
3/09/2015
30/08/2015
31/08/2015  
4/09/2015   
5/09/2015

当美国en-US被选为文化偏好时,我们会低于日期......

8/24/2015
8/30/2015   
8/31/2015   
9/1/2015    
9/10/2015   
9/11/2015       
9/19/2015
9/2/2015
9/20/2015
9/3/2015
9/4/2015
9/5/2015

***显示的日期不是按排序方式。我需要在订单中显示日期,而不管它在哪种文化偏好中。

2 个答案:

答案 0 :(得分:0)

您可以使用表格默认视图的Sort属性。确保使用DefaultView访问DataRowView而不是使用表格行。类似的东西:

culturetable.DefaultView.Sort = "date ASC";

Console.WriteLine("==== en-AU ====");
DateTimeFormatInfo au = new CultureInfo("en-AU", false).DateTimeFormat;     
foreach(DataRowView row in culturetable.DefaultView){
    Console.WriteLine(((DateTime)row[0]).ToString(au.ShortDatePattern));
}
Console.WriteLine("==== en-US ====");
DateTimeFormatInfo us = new CultureInfo("en-US", false).DateTimeFormat;     
foreach(DataRowView row in culturetable.DefaultView){
    Console.WriteLine(((DateTime)row[0]).ToString(us.ShortDatePattern));
}

Here is a fiddle

答案 1 :(得分:0)

在将列值从datetime类型转换为字符串类型后,您将列作为字符串类型进行排序。这就是你看到这个问题的原因。如果您不打算对日期时间类型列进行排序,则添加隐藏列并指定自定义" YYYYMMDD"将日期时间转换为字符串的字符串转换。然后对隐藏的字符串列进行排序,无论数据时间值的本地区域性显示如何,您的数据始终都是正确的。