IT TIP

Java에서 지정된 날짜 동안 일광 절약 시간 (DST)이 활성 상태인지 확인

itqueen 2021. 1. 6. 20:36
반응형

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 InstantUTC 의 타임 라인에있는 순간입니다 .
  • A는 ZonedDateTime을 적용한 결과이다 ZoneId내지 An Instant.

예제 코드 :

ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );
ZoneId z = now.getZone();
ZoneRules zoneRules = z.getRules();
Boolean isDst = zoneRules.isDaylightSavings( now.toInstant() );

마지막 줄 에서 간단한 호출로 Instant객체에서 객체 를 추출해야하는 방법에 유의하십시오 .ZonedDateTimetoInstant

최신 및 레거시 Java의 날짜-시간 유형 표입니다.


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 클래스는 어디서 구할 수 있습니까?

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 )를 제공합니다.

참조 URL : https://stackoverflow.com/questions/1060479/determine-whether-daylight-savings-time-dst-is-active-in-java-for-a-specified

반응형