2010-02-03 35 views
9

我在埃塞俄比亚,我们有13个月。其中12人每人30天,13个月5或6天。我想使用BindingSource排序方法按日期对数据进行排序。但要做到这一点,我需要将我的日期字段设置为日期数据类型。当我设置DataType时,我无法输入一些值,如月份值为13,第二个月的日值为30。是否有可能使日期数据类型接受13为一个月和30为所有月份?

我想要的只是让我的应用程序接受13为一个月,30为所有月份的一天,以便我可以按日期对数据进行排序。可以通过为我的应用程序或其他方式设置文化来实现吗?

+0

你正在使用什么语言/框架? (例如VB.Net,Java等) – 2010-02-03 14:14:46

+0

我正在使用vb.net – 2010-02-03 14:24:14

+0

究竟是什么阻止你进入13?它是数据库还是其他代码? – NotMe 2010-02-03 14:24:32

回答

3

从理论上讲,您可以加载对应于埃塞俄比亚的语言/国家的CultureInfo。看来Ethiopia中的母语是Amharic,它具有ISO 639短代码“am”和ISO 3166国家代码为埃塞俄比亚为“ET”。因此,看来埃塞俄比亚的正确culture code是“am-ET”。因此,请尝试以下操作。

CultureInfo ethiopia = new CultureInfo("am-ET"); 
int year = 2002; // it is currently 2002 in Ethiopia 
int months = ethiopia.Calendar.GetMonthsInYear(year); 
for (int i = 1; i <= months; i++) { 
    Console.WriteLine(ethiopia.Calendar.GetDaysInMonth(year, i)); 
} 

然后,as it is the 13th month that has five or days

DateTime time = new DateTime(2002, 13, 5, ethiopia.Calendar); 

将是合法的。

如果由于某种原因不起作用,您还可以看看如何使用此CodeProject on the Vietnamese Lunar Calendar作为示例创建自定义日历。

+1

Ethiopic编号系统非常吸引人,因为它没有零:http://blogs.msdn.com/michkap/ archive/2005/02/01/364376.aspx – jason 2010-02-03 14:34:46

+0

我该如何改变数据表?我的意思是这是不接受来自数据库的数据的数据表。 – 2010-02-03 14:47:46

+0

尝试将'DataTable.Locale'属性设置为'CultureInfo'的一个表示“am-ET”文化的实例。我不知道这会起作用,但这是第一次尝试。问题是'DataTable'仍然会使用InvariantCulture来实现绝大多数的功能。 – jason 2010-02-03 14:53:34

0

我以此作为解决方案。

您可以在您的数据表中添加一个单独的列,以解释多余的天数...然后按两列对数据进行排序。例如:这里将是一个示例表排序第一降序由列1再由列2:

RegDate ---------------- EpaDate

三十零分之十二/ 09- -------------- 1/5/2010 12/30/09 ---------------- 1/4/2010 12/30/09 ---------------- 1/3/2010 12/30/09 ---------------- 1/2/2010 12/30/09 ---------------- 1/1/2010 12/30/09 ----------------- -NULL 09/12/29 ------------------ NULL 09年12月28日----------------- -NULL

相关问题