Как кодировать алгоритм Shabbat Sunset для любой пятницы в Java?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как кодировать алгоритм Shabbat Sunset для любой пятницы в Java?

Сообщение Anonymous »

Этот вопрос был задан до , но без результата, как написать алгоритм без внешней библиотеки или веб -сервиса.
Я попытался использовать объяснение с этого сайта:
https://en.wikipedia.org/wiki/sunrise_e ... culate_ons.> мой код до сих пор. < /p>

Код: Выделить всё

package sunny;

import java.util.StringJoiner;

public enum City
{
BERLIN("Berlin", "Germany", "52.52", "13.405", "Europe/Berlin", "34");

private String cityname;
private String countryname;
public String latitude;
public String longitude;
public String zoneId;
public String elevationInMeters;

City(String cityname, String countryname, String latitude, String longitude,
String zoneId, String elevationInMeters)
{
this.cityname = cityname;
this.countryname = countryname;
this.latitude = latitude;
this.longitude = longitude;
this.zoneId = zoneId;
this.elevationInMeters = elevationInMeters;
}

public String getInfo()
{
StringJoiner info = new StringJoiner(" ");
info.add(countryname);
info.add(cityname);
info.add(String.valueOf(latitude));
info.add(String.valueOf(longitude));
info.add(String.valueOf(zoneId));
return info.toString();
}
}
< /code>
и < /p>
package sunny;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class TestBigDecimal
{
public static void main(String[] args)
{
City cityAsked = City.BERLIN;
LocalDateTime dayAsked = LocalDateTime.of(2025, 7, 18, 0, 0);

LocalDateTime start = LocalDateTime.of(2000, 1, 1, 12, 0);
BigDecimal n = new BigDecimal(Duration.between(start, dayAsked).toDays()); // Julian
// day
// duration

BigDecimal jStar = n.subtract(new BigDecimal(cityAsked.longitude)
.divide(new BigDecimal("360"), 8, RoundingMode.HALF_UP)); // mean
// solar
// time

BigDecimal M = (new BigDecimal("357.5291")
.add(new BigDecimal("0.98560028").multiply(jStar)))
.remainder(new BigDecimal("360")); // solar mean anomaly

BigDecimal C = (new BigDecimal("1.9148")
.multiply(new BigDecimal(Math.sin(M.doubleValue())).add(
new BigDecimal("0.0200").multiply(new BigDecimal(Math.sin(
M.multiply(new BigDecimal("2")).doubleValue())).add(
new BigDecimal("0.0003").multiply(new BigDecimal(
Math.sin(M.multiply(new BigDecimal("3"))
.doubleValue()))))))));// equation of
// the center

BigDecimal lambda = (M.add(C).add(new BigDecimal("180"))
.add(new BigDecimal("102.9372")).remainder(new BigDecimal("360")));// ecliptic
// longitude

BigDecimal jTransit = new BigDecimal("2451545").add(jStar)
.add(new BigDecimal("0.0053")
.multiply(new BigDecimal(Math.sin(M.doubleValue())))
.add(new BigDecimal("0.0069")
.multiply(new BigDecimal(Math.sin(lambda
.multiply(new BigDecimal("2")).doubleValue()))))); // solar
// transit
// =
// solar
// noon

BigDecimal sinDelta = new BigDecimal(Math.sin(lambda.doubleValue()))
.multiply(new BigDecimal(Math.sin(23.4397)));  // declination of
// the sun

BigDecimal cosOmegaNull = new BigDecimal(Math.sin(new BigDecimal("0.833")
.add(new BigDecimal("-2.076")
.multiply(new BigDecimal(cityAsked.elevationInMeters)
.sqrt(MathContext.DECIMAL32))
.divide(new BigDecimal("60"), 8, RoundingMode.HALF_UP))
.doubleValue())).subtract(
new BigDecimal(Math.sin(Double.valueOf(cityAsked.latitude))))
.multiply(sinDelta); // hour angle

BigDecimal omegaNull = new BigDecimal(
Math.cos(cosOmegaNull.doubleValue()));
BigDecimal jSunset = jTransit.add(
omegaNull.divide(new BigDecimal("360"), 8, RoundingMode.HALF_UP)); // sunset
// in
// Julian
// days

BigDecimal daysSunset = new BigDecimal(jSunset.toBigInteger().toString());
BigDecimal daysFraction = jSunset.subtract(daysSunset);

LocalDateTime result = dayAsked.plusMinutes(daysFraction
.multiply(new BigDecimal("24").multiply(new BigDecimal("60")))
.longValue());
ZonedDateTime adjustedResult = result.atZone(ZoneId.of("Europe/Berlin"));
LocalDateTime jewishSundown = LocalDateTime.from(result)
.minusMinutes(
new BigDecimal(adjustedResult.getOffset().getTotalSeconds())
.divide(new BigDecimal("60")).longValue())
.minusMinutes(18L);

System.out.println(n);
System.out.println(jSunset);
System.out.println(daysSunset);
System.out.println(daysFraction);
System.out.println(result);
System.out.println(adjustedResult);
System.out.println(jewishSundown);
}
}
Согласно 2 в пятницу, 18 июля 2025 года. Сансет = время свеча для Берлина составляет 21:01.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ay-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как кодировать алгоритм Shabbat Sunset для любой пятницы в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Как кодировать алгоритм Shabbat Sunset для любой пятницы в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как кодировать алгоритм Shabbat Sunset для любой пятницы в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • API Sunrise-Sunset возвращает неожиданные ответы
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • API Sunrise-Sunset возвращает неожиданные ответы
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»