c# - 将公历日期转换为 Um al Qura 时损失一天

标签 c# datetime .net-2.0

我在使用 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);

运行后,年是 1434,月是 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),那么天是 15,这是正确的。

我已经检查了我能想到的两个项目之间可能不同的所有内容:.NET 版本、平台目标 (x86),但看不到任何明显的东西。

非常感谢任何想法。

最佳答案

我已经测试了你的代码:

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 中,我得到 1434/8/15 作为答案。所以它似乎是 .NET 2.0 中的一个错误。

还要检查 umAlQuraCalendar.AlgorithmType 是否为 LunarCalendar(应该是这样)。因为如果是 LunisolarCalendar,可能会有一些像这样的细微差别。

关于c# - 将公历日期转换为 Um al Qura 时损失一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17292738/

相关文章:

c# - 如何在图像上引入叠加层

c# - IAsyncResult 的属性isCompleted 是如何更新的?

c# - 为什么 DateTime 不是预定义类型?

python - 查找 Pandas 日期时间索引中是否存在指定月份字符串中的至少一个条目

c# - 如何使用重复键对列表进行排序?

.net - 从 .net 2.0 升级到 4.0 会提高性能吗?

c# - MVC 发布请求 - 最大数量IEnumerable<T> 绑定(bind)中的对象数量?

c# - 使用 XML 的 WCF 请求验证

php - MYSQL - 选择当前工作周的日期

.net-2.0 - 如何防止未经授权的代码访问 .NET 2.0 中的程序集?