Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jalali(shamsi)日历中为日期添加天数_Java_Date_Calendar - Fatal编程技术网

Java 如何在jalali(shamsi)日历中为日期添加天数

Java 如何在jalali(shamsi)日历中为日期添加天数,java,date,calendar,Java,Date,Calendar,我正在开发一个java应用程序,其中我需要从用户那里获取日期和天数,然后将这些数字添加到日期中,并向用户显示最终日期,在本例中,该日期将是截止日期。 这里的问题是,我使用的是shamsi(jalali)日历,为了计算,首先我必须将shamsi日期转换为java标准日历,然后添加日数,再将其转换回shamsi日期 Date miladiDate = new Date(DateConvertor.shamsi2miladi(entity.getDoDate())); SimpleDateForma

我正在开发一个java应用程序,其中我需要从用户那里获取日期和天数,然后将这些数字添加到日期中,并向用户显示最终日期,在本例中,该日期将是截止日期。 这里的问题是,我使用的是shamsi(jalali)日历,为了计算,首先我必须将shamsi日期转换为java标准日历,然后添加日数,再将其转换回shamsi日期

Date miladiDate = new Date(DateConvertor.shamsi2miladi(entity.getDoDate()));

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar c = Calendar.getInstance();
c.setTime(miladiDate);
c.add(Calendar.DATE, baseEvaluate.getDeadLineDays());
String output = sdf.format(c.getTime());
System.out.println(output);
entityDetail.setDeadLineDate(DateConvertor.miladi2date(c.getTime()));
我想知道是否有一种方法可以在不转换shamsi日期的情况下实现这一点,只需将日期添加到shamsi日期。
注意:我使用了joda time,它不支持shamsi日历。

您可以使用github和jcenter上提供的Jalali日历,它有一个内置的方法来根据日差计算日期:

这个类似的问题提供了源代码,它声称这是一个准确的太阳历,可以转换成波斯(Shamsi)日期

其他一些答案可能会有所帮助


请原谅我的无知,因为我对波斯日历一无所知……但我可以告诉你,将日历系统插入Java的现代日期时间体系结构(Java.time)是可能的

java.time 旧的java.util.Date/.Calendar类非常混乱,应该避免使用。它们已经被内置在Java8和更高版本中的框架所取代

插入实现 我建议寻找,甚至制作一个可以插入java.time框架的年表。这将是对的实施,而且很可能是对的扩展


下面我列出了十个实现,因为它们都是开源的,可以为任何尝试实现的人提供帮助。这个列表显示,将实现插入java.time被证明是可行的

java.time框架目前包括以下日历系统:


  • 农历

  • 基于事实上的世界日历ISO-8601标准)

  • 日本的皇家历法体系

  • 民国历法,主要用于台湾

  • 主要用于泰国
该项目是java.time的扩展。它是将来可能添加到java.time的试验场。如果有人有一个年表的开源实现,这个项目可能会接受它

目前,Three Ten Extra包括以下日历系统:


  • 主要用于信奉基督教的埃及

  • 主要用于埃塞俄比亚

  • 朱利安历法体系,现代公历和ISO历法的前身

  • 52/53周的会计日历系统,遵循

  • 思想系统

我认为您已经找到了最好的方法来解决目前Java中缺少对shamsi calendar库的支持的问题。我之前的评论已经过时了。同时,我已经用Java实现了Jalali日历——支持添加天数等,请参阅我的另一篇文章中的演示。只要使用Time4J而不是Time4A,至少使用模块core+i18n+calendar。“将一个实现插入java.time已被证明是可行的…”嗯,而不是。为了评估设计的质量,仅仅计算提供的日历是不够的。细节很重要,例如一天的开始偏离了午夜,埃塞俄比亚人没有i18n等,1941年以前的断断续续的thaibuddhist等等!供您参考:整个可插拔年表设计是由Oracle针对S.Colbourne的抵制而推出的。冲突的最终结果是增强了
ChronoLocalDate
-API,其警告如此之多,以至于其javadoc看起来像“不要使用我”。可插拔的年表是邪恶的设计,它们不能考虑各种日历的古怪和偏差,因为它们只是试图定义一个“标准”方案。另见。Oracle在
java.time
中事实上恢复了这一概念,只是形式有所不同。