Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 如何在没有时间的情况下将公历日期转换为伊斯兰(Hijri)日期?_Java_Datetime_Localdate_Hijri - Fatal编程技术网

Java 如何在没有时间的情况下将公历日期转换为伊斯兰(Hijri)日期?

Java 如何在没有时间的情况下将公历日期转换为伊斯兰(Hijri)日期?,java,datetime,localdate,hijri,Java,Datetime,Localdate,Hijri,见和 以下内容如何正确: LocalDate-gregorianDate=LocalDate.parse(gregorianString,dateFormatter); HijrahDate islamicDate=HijrahDate.from(gregorianDate); 我认为,日暮日是日落,不是午夜,所以应该有一个GRGGORIDENATE时间。 < P>在java文档中提到,LooDead类不考虑时间。 参考: 此类不存储或表示时间或时间 时区。相反,它是对日期的描述,用于 生日

见和

以下内容如何正确:

LocalDate-gregorianDate=LocalDate.parse(gregorianString,dateFormatter);
HijrahDate islamicDate=HijrahDate.from(gregorianDate);

<>我认为,日暮日是日落,不是午夜,所以应该有一个GRGGORIDENATE时间。

< P>在java文档中提到,LooDead类不考虑时间。 参考:

此类不存储或表示时间或时间 时区。相反,它是对日期的描述,用于 生日


考虑根据您的要求使用LocalDateTime。

您是对的,Hijri日历在前一个西方日的日落时开始。您也可以说标准Java不支持它

为什么?

我翻了三十个旧档案,但什么也没找到。然而,
java.time
-API的主要开发人员和架构师曾在下面一句话中指出:

此实现将一天定义为午夜到午夜,与 按照ISO年表。一天的正确开始是在太阳落山的时候 然而,前一天,这无法轻易建模,并且已经 忽略

我的猜测是:同样的动机也是为什么
java.time
在与伊斯兰日历的转换中不考虑一天中的时间的原因。它很难实现,主要是因为它需要天文计算

如何处理这一缺陷?

在标准Java的范围内,建议用户尽可能忽略一天中的时间。所以请记住,这种转换是无时间限制的抽象。当然,如果您想确定当前日期(这间接涉及到一天中的时间和民用时区),那么这种转换或多或少是错误的

如果您不想忽略日落作为一天的开始…

。。。然后您可以使用我的库(我不知道还有其他库可以处理日落作为一天的开始)。注意课堂上的文档。从瞬间/瞬间到Hijri日历日期的示例:

// the geographic location
SolarTime meccaTime = SolarTime.ofLocation(21.4225, 39.826111); 
// or even simple: meccaTime = SolarTime.ofMecca()

// the moment to be converted
Moment now = SystemClock.currentTime();
// alternative using an explicit gregorian date:
//   now = PlainDate.of(2019, 5, 26).atTime(18, 45).inStdTimezone();
// alternative using modern Java: 
//   now = Moment.from(Instant.now());
// alternative using outdated old API: 
//   java.util.Date instant = new java.util.Date();
//   now = TemporalType.JAVA_UTIL_DATE.translate(instant);

// the conversion
HijriCalendar hcal = now.toGeneralTimestamp(
  HijriCalendar.family(),
  HijriCalendar.VARIANT_UMALQURA, // attention: there is no single islamic calendar
  Timezone.ofSystem().getID(), // or use something like: ()-> "Europe/London"
  StartOfDay.definedBy(meccaTime.sunset()));
Time4J还包含一个格式引擎,它能够以多种方式解析公历日期或Hijri日历日期时间。在基于的格式设置和解析过程中,也可以考虑日落时的开始时间

还支持从Hijri日历日期到时刻的反向转换。例如:

HijriCalendar hcal = ...;
Moment m = 
  hcal.atTime(18, 45).in(Timezone.ofSystem(), StartOfDay.definedBy(meccaTime.sunset()));

它只是告诉你一般哪个日期是同一个日期。如果你想要精确,你需要的不仅仅是当地的日期和时间——你还需要日落的时间,这意味着你需要精确的即时和地理位置。日历上没有普遍的协议,因此Java选择了沙特官方日历,并允许一些选项。关于日落,也可以采取类似的解决办法。欧洲的一些穆斯林使用沙特的日落时间,一些使用当地的日落时间。@JonathanRosene似乎你的评论是你自己的答案。但这不是Java实现它的方式。这正是我的观点。如果没有时间,就不可能在回历和公历之间转换。我理解你的意思。但对于不同的时区,你可以指出同样的事情。考虑到它是印度的21/04/2019,它不一定意味着它是芝加哥的21/04/2019,因为它也可以是20/04/2019。但是LoalDead类不考虑任何时间,它只考虑绝对日期。因此,时间在这里并不重要。因此,如果我将问题改为使用ZoneDate,这适用于您提到的情况,会有帮助吗?