【问题标题】:Hijri and Gregorian DateTime constructor回历和公历 DateTime 构造函数
【发布时间】:2011-12-22 17:54:05
【问题描述】:

传递给 DateTime 类型构造函数的 Calendar 对象的正确行为是什么?

我有如下示例的年、月和日组件:

day = 1
month = 5 
year = 1433 (which is the current Hijri year)

当使用下面的代码创建一个日期时间对象时,结果是一个有效的格雷格日期

HijriCalendar hijri = new HijriCalendar();
//Get the First Day in the Month
DateTime firstDayInMonth = new DateTime(1433, month, 1, hijri);

使用下面的代码会生成一个有效的回历日期:

GregorianCalendar greg = new GregorianCalendar();
//Get the First Day in the Month
DateTime firstDayInMonth = new DateTime(1433, month, 1, greg);

这是正确的结果吗?

【问题讨论】:

  • 看到两个日历上都有一个特定的日期,到底是什么问题?
  • 您是否正在尝试将回历转换为公历,这样如果您输入回历 1433 年就会得到公历 2011 年?
  • @ChrisBD :是的,我想通过传递被认为是回历的组件来获取公历日期,反之亦然

标签: c# .net datetime calendar


【解决方案1】:

你的第一个例子是正确的。 DateTime 不会采用 Hijri 格式,它只是您给它的标准化等价物。如何获取 Hirji 日期请参见以下代码:

HijriCalendar hijri = new HijriCalendar();
DateTime firstDayInMonth = new DateTime(1433, 10, 11, hijri);
Console.WriteLine(hijri.GetEra(firstDayInMonth)); // 1
Console.WriteLine(hijri.GetYear(firstDayInMonth)); // 1433
Console.WriteLine(hijri.GetMonth(firstDayInMonth)); // 10
Console.WriteLine(hijri.GetDayOfMonth(firstDayInMonth)); // 11

您的第二个代码块只是将公历日期设置为“1/1/1433”,因此当您检查它时,您并没有得到 hirji 日期,而只是得到了 15 世纪给出的日期。

查看http://msdn.microsoft.com/en-us/library/system.globalization.hijricalendar.aspx 并查看其中的方法应该可以让您更好地了解应该在日历对象上做什么以及在 DateTime 对象上应该发生什么。

【讨论】:

    【解决方案2】:

    您实际上并没有提出有意义的问题。如果您尝试将给定日期从一个日历转换为另一个日历,那么在所有回历日历与公历的月份不同之后,日期会发生变化。

    查看此site 以获取示例 - 它甚至有可下载的代码。

    【讨论】:

    • 我的问题不是关于它本身的日期,而是关于为什么在传递公历类型的日历时结果是回历日期..
    • @SShebly - DateTimeDateTime。它没有附加日历。
    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多