首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Globalization.HebrewCalendar类有问题吗?

System.Globalization.HebrewCalendar类有问题吗?
EN

Stack Overflow用户
提问于 2014-07-04 03:13:55
回答 1查看 119关注 0票数 1

我有下面的代码,一个简单的例子,我想在上面扩展以计算Yartzeit日期(死亡周年纪念)。代码在犹太日期5771/1/1的基础上加了1个月。它给了我一个例外,我不知道为什么(我对犹太日期知之甚少):

代码语言:javascript
复制
Imports System
Imports System.Globalization
Imports System.Threading 

Public Module Module1
    Public Sub Main()
        Dim hc As New HebrewCalendar()
        Dim jewishCulture As CultureInfo = CultureInfo.CreateSpecificCulture("he-IL")
        jewishCulture.DateTimeFormat.Calendar = hc
        Thread.CurrentThread.CurrentUICulture = jewishCulture
        Dim startDate = new DateTime(5771,1,1)
        Console.WriteLine(startDate.ToString())
        startDate = hc.AddMonths(startDate, 1)      
        Console.WriteLine(startDate.ToString())
    End Sub
End Module

以下是结果(来自.NET Fiddle,我在本地也有相同的结果):

代码语言:javascript
复制
1/1/5771 12:00:00 AM
Run-time exception (line -1): Value to add was out of range.
Parameter name: months

Stack Trace:

[System.ArgumentOutOfRangeException: Value to add was out of range.
Parameter name: months]

根据HebrewCalendar.AddMonths方法(http://msdn.microsoft.com/en-us/library/system.globalization.hebrewcalendar.addmonths(v=vs.110).aspx)的文档,如果“月数小于-120,000或大于120,000”,则应抛出ArgumentOutOfRangeException。这里显然不是这样,我在第一个月的基础上加了一个月。.NET HebrewCalendar类有没有已知的问题?或者我还遗漏了什么?

谢谢,

PS:我之所以使用HebrewCalendar.AddMonths而不是DateTime.AddMonths方法,是因为HebrewCalendar.AddMonths上的以下注释:“如果结果日期不是结果年份的结果月份中的有效日期,则结果DateTime的日期部分会受到影响。它将更改为结果年份的结果月份中的最后一个有效日期。”

EN

回答 1

Stack Overflow用户

发布于 2014-07-04 03:48:42

这里有两个问题:

  • 您正在将区域性分配给CurrentUICulture。这将不会对DateTime产生影响。如果具有本地化的resx文件,则UI区域性确定要使用的本地化资源文件。您应该改为设置数字和日期格式中使用的CurrentCulture

Thread.CurrentThread.CurrentCulture = jewishCulture

  • If您没有使用公历当您从单个年、月、日部分构造DateTime时,您必须将日历作为参数传递。See the remarks in the MSDN docs

Dim startDate =新的DateTime(5771,1,1,hc)

请记住,DateTime对象本身只是对自公历0001/01/01以来经过的刻度数的包装。它在其属性和方法中始终使用公历。(如果你看看startDate.Year,你会发现它是2010年,而不是5771年。)

要添加"1希伯来语月“-您必须调用HebrewCalendar.AddMonths而不是DateTime.AddMonths。你说得对,但这不仅仅是因为你所描述的原因。

此外,您可能会对Jon Skeet在Noda Time 1.3中的最新工作感兴趣,该工作添加了对希伯来日历的实验性支持。请在"Hebrew" in the user guide下阅读,并阅读the comments in the 1.3 release notes。总的来说,我更信任Jon对希伯来日历的解释,而不是.Net框架的HebrewCalendar类。(请参阅this discussion。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24561641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档