Йодатиме, как узнать, включено ли летнее время
У меня есть 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, либо способ сделать это.
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);
ОБНОВИТЬ
Я до сих пор не уверен, что именно вы спрашиваете, но, возможно, вы ищете один из них:
// 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;