Java에서 지정된 날짜 동안 일광 절약 시간 (DST)이 활성 상태인지 확인
위치의 위도 / 경도를 가져와 일광 절약 시간이 켜졌다 꺼 졌을 때 GMT 오프셋을 반환하는 Java 클래스가 있습니다. 올바른 오프셋을 적용 할 수 있도록 현재 날짜가 일광 절약 시간인지 Java에서 쉽게 확인할 수있는 방법을 찾고 있습니다. 현재는 미국 시간대에 대해서만이 계산을 수행하고 있지만 결국에는이를 글로벌 시간대로 확장하고 싶습니다.
다음은 질문이있는 시스템에 대한 답변입니다.
TimeZone.getDefault().inDaylightTime( new Date() );
클라이언트를 위해 이것을 알아 내려는 서버는 클라이언트의 시간대가 필요합니다. 이유는 @Powerlord 답변을 참조하십시오.
특정 TimeZone
TimeZone.getTimeZone( "US/Alaska").inDaylightTime( new Date() );
tl; dr
ZoneId.of( "America/Montreal" ) // Represent a specific time zone, the history of past, present, and future changes to the offset-from-UTC used by the people of a certain region.
.getRules() // Obtain the list of those changes in offset.
.isDaylightSavings( // See if the people of this region are observing Daylight Saving Time at a specific moment.
Instant.now() // Specify the moment. Here we capture the current moment at runtime.
) // Returns a boolean.
java.time
여기에 현대적인 java.time (참조 자습서 )의 버전 정답 으로 mamboking은 .
- A
ZoneId
는 시간대를 나타냅니다. 클래스는 DST 가 특정 시간대에 적용 되는지 여부를 알려주는 규칙을 알고 있습니다 . - 이
ZoneRules
클래스는 시간대에 대한 모든 과거 및 미래 전환을 모델링합니다. - An
Instant
은 UTC 의 타임 라인에있는 순간입니다 . - A는
ZonedDateTime
을 적용한 결과이다ZoneId
내지 AnInstant
.
예제 코드 :
ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );
…
ZoneId z = now.getZone();
ZoneRules zoneRules = z.getRules();
Boolean isDst = zoneRules.isDaylightSavings( now.toInstant() );
마지막 줄 에서 간단한 호출로 Instant
객체에서 객체 를 추출해야하는 방법에 유의하십시오 .ZonedDateTime
toInstant
java.time 정보
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.
java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이나 클래스 가 필요하지 않습니다 .java.sql.*
java.time 클래스는 어디서 구할 수 있습니까?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 이상 -번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- 대부분의 java.time 기능은 ThreeTen-Backport의 Java 6 및 7로 백 포트됩니다 .
- 기계적 인조 인간
- java.time 클래스 의 최신 버전의 Android 번들 구현 .
- 이전 Android (<26)의 경우 ThreeTenABP 프로젝트는 ThreeTen-Backport (위에서 언급)를 채택합니다 . ThreeTenABP 사용 방법…을 참조하십시오 .
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 곳입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
TimeZone tz = TimeZone.getTimeZone("EST");
boolean inDs = tz.inDaylightTime(new Date());
이러한 좌표를 사용하여 더 많은 작업을 수행하고 어느 시간대에 있는지 알아 내야합니다. 어떤 TimeZone인지 알면 isDayLight () 메서드가 유용 할 것입니다.
예를 들어, -0500이 EST (미국 / 캐나다 동부 표준시), CDT (미국 / 캐나다 중부 일광 절약 시간), COT (콜롬비아 표준시), AST (브라질 에이커 표준시), ECT (에콰도르)인지 알 수있는 방법이 없습니다. 시간) 등 ...
이들 중 일부는 일광 절약 시간을 지원하거나 지원하지 않을 수 있습니다.
Joda Time 에는 오프셋을 계산하는 처리 방법이 포함되어 있습니다. DateTimeZone.convertLocalToUTC (...)를 참조하십시오.
이를 보완하려면 위도 / 경도 정보로 현재 시간대를 찾아야합니다. GeoNames 는 웹 서비스를위한 Java 클라이언트와 간단한 웹 요청 프레임 워크 (예 : http://ws.geonames.org/timezone?lat=47.01&lng=10.2 )를 제공합니다.
'IT TIP' 카테고리의 다른 글
EF6 Code First의 enum에 해당하는 테이블을 만드는 방법은 무엇입니까? (0) | 2021.01.06 |
---|---|
텍스트 상자에서 커서의 위치를 어떻게 찾습니까? (0) | 2021.01.06 |
일괄 적으로 "종료하려면 Enter를 누르십시오"를 수행하는 방법 (0) | 2021.01.06 |
C # 4.0에서 클래스에 대한 일반 분산이없는 이유는 무엇입니까? (0) | 2021.01.06 |
Android에서 TextView의 색상을 설정하는 방법은 무엇입니까? (0) | 2021.01.06 |