提问人:Ken Jackson 提问时间:6/25/2013 更新时间:8/12/2015 访问量:2728
将公历日期转换为乌姆古拉时丢失一天
Losing a day when converting a Gregorian date to Um al Qura
问:
我在使用 Um al Qura 日历获取 C# DateTime 对象的日、月和年组件时遇到了问题。
代码片段为:
DateTime date = new DateTime(2013, 6, 24);
UmAlQuraCalendar umAlQuraCalendar = new UmAlQuraCalendar();
int year = umAlQuraCalendar.GetYear(date);
int month = umAlQuraCalendar.GetMonth(date);
int day = umAlQuraCalendar.GetDayOfMonth(date);
运行此操作后,year 是 1434,month 是 8,这两者都是正确的。但是,第 14 天是错误的(根据这里:http://www.al-habib.info/islamic-calendar/islamic-calendar-ummulqura-2013.htm)
如果我将代码更改为:
DateTime date = new DateTime(2013, 6, 24, 0, 0, 0, 1); // i.e. One millisecond after midnight
UmAlQuraCalendar umAlQuraCalendar = new UmAlQuraCalendar();
int year = umAlQuraCalendar.GetYear(date);
int month = umAlQuraCalendar.GetMonth(date);
int day = umAlQuraCalendar.GetDayOfMonth(date);
那么一天是 15 点,这是正确的。
更奇怪的是,这段代码位于一个大型应用程序的深处:C# 代码是从 VB6 exe 调用的。
如果我将上面的第一个代码片段提取到独立的 C# 项目 (.NET 2.0) 中,则 day 是 15,这是正确的。
我已经检查了我能想到的在两个项目之间可能有所不同的所有内容:.NET 版本、平台目标 (x86),但看不到任何明显的东西。
任何想法都非常感谢。
答:
0赞
Kaveh Shahbazian
6/25/2013
#1
我已经测试了你的代码:
DateTime date = new DateTime(2013, 6, 24);
UmAlQuraCalendar umAlQuraCalendar = new UmAlQuraCalendar();
int year = umAlQuraCalendar.GetYear(date);
int month = umAlQuraCalendar.GetMonth(date);
int day = umAlQuraCalendar.GetDayOfMonth(date);
Log.Info(string.Format("{0} / {1} / {2}", year, month, day));
在 .NET 4.5 中,我得到了答案。所以这似乎是 .NET 2.0 中的一个错误。1434 / 8 / 15
还要检查是否是(应该是这样)。因为如果是这样,可能会有一些像这样的细微差异。umAlQuraCalendar.AlgorithmType
LunarCalendar
LunisolarCalendar
评论
0赞
Ken Jackson
6/25/2013
是的,在这两种情况下都是.我只是对为什么它在独立的 .NET 2.0 项目中正常工作感到困惑。这让我认为这是我的应用程序中的东西,而不是 .NET 2.0 错误umAlQuraCalendar.AlgorithmType
LunarCalendar
0赞
Kaveh Shahbazian
6/25/2013
另外,我隐约记得我的 VB6 时代有问题。time
0赞
Yasser Amer
8/12/2015
#2
此问题的解决方案是使用配置值 +1 或 -1 天,然后将此值添加到计算日期以更正它。
评论