Подтвердить что ты не робот

Jodatime, как узнать, включен ли дневной свет

У меня есть API, которому нужен часовой пояс. Напр. если я нахожусь в Калифорнии, мне нужно пройти -7 к ней, когда наступает летнее время (Калифорния, PDT - GMT-7) и -8, когда переход на летнее время отключен. Но я не могу определить способ узнать, включено ли в текущую дату, включено ли летнее время.

Date date1 = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
double[] coords = db.getCoords(id1);
double latitude = coords[0];
double longitude = coords[1];
double timezone = -7; /* For Pacific daylight time (GMT - 7)*/

ArrayList<String> Times = Class.foo(cal, latitude,
longitude, timezone);

Я установил JodaTime, и даже там я не могу найти способ. Пожалуйста, предложите, если у вас есть родной java или jodatime.

4b9b3361

Ответ 1

Когда вы создаете DateTime с JodaTime, вам не нужно передавать смещение. Вместо этого пропустите часовой пояс. Он позаботится о том, чтобы определить правильное смещение, включая рассмотрение DST.

// First get a DateTimeZone using the zone name
DateTimeZone zone = DateTimeZone.forID("America/Los_Angeles");

// Then get the current time in that zone.
DateTime dt = new DateTime(zone);

// Or if you prefer to be more explicit, this syntax is equivalent.
DateTime dt = DateTime.now(zone);

UPDATE

Я все еще не уверен, что вы спрашиваете, но, возможно, вы ищете один из них:

// To get the current Pacific Time offset
DateTimeZone zone = DateTimeZone.forID("America/Los_Angeles");
int currentOffsetMilliseconds = zone.getOffset(Instant.now());
int currentOffsetHours = currentOffsetMilliseconds / (60 * 60 * 1000);


// To just determine if it is currently DST in Pacific Time or not.
DateTimeZone zone = DateTimeZone.forID("America/Los_Angeles");
boolean isStandardOffset = zone.isStandardOffset(Instant.now());
boolean isDaylightOfset = !isStandardOffset;