Java 8에서 기본 Zone Offset을 얻는 방법
8을 사용합니다.ZoneId.default()
디폴트 「」를 할 수 .ZoneId
「」를 하는 ZoneOffset
i i i i i i 。ZoneId
몇 가지 이 있고 각 규칙에는 "discription"이 .ZoneOffset
, ,, ,, ,, ,, ,, ,, ,ZoneId
를 개 수 .ZoneOffset
dr;dr
OffsetDateTime.now().getOffset()
다만, UTC로부터의 오프셋이 아닌 타임 존을 사용하는 것이 좋습니다.
ZoneId.systemDefault()
오프셋과 시간대
Offset-from-UTC는 시간, 분, 초의 수에 불과하며, 그 이상은 아닙니다.예를들면,-08:00
UTC 8시간 것을 의미합니다.+05:45
는 UTC보다 5시간 45분 빠른 것을 의미합니다.
타임존은 특정 지역 사람들이 사용하는 오프셋에 대한 과거, 현재 및 미래의 변경 이력입니다.일광 절약 시간(DST)과 같은 이상 징후는 특정 기간 동안 오프셋의 변화를 일으키는 경우, 과거에 발생한 경우, 그리고 정치인들이 계획된 변화를 발표했을 때 시간에 따라 추적됩니다.
알고 있을 때 존을 사용하는 것이 좋습니다.
모든 영역의 오프셋은 시간에 따라 달라집니다.예를 들어 미국의 DST는 1년 중 절반 정도 오프셋을 1시간 이동한 후 나머지 절반 동안 오프셋으로 되돌립니다.타임존의 전체 목적은 오프셋의 변화를 문서화하는 것입니다.
따라서 날짜 없이 오프셋을 요청하는 것은 정말 의미가 없습니다.예를 들어 올해 일부에서는 오프셋은 다음과 같습니다.-08:00
중 에는 그렇다-07:00
DST 중 。
OffsetDateTime
다음으로 모멘트를 로 지정하고 를 추출합니다.
OffsetDateTime odt = OffsetDateTime.now ();
ZoneOffset zoneOffset = odt.getOffset ();
odt.toString(): 2017-01-02T15:19:47.162-08:00
zoneOffset.toString(): -08:00
★★★now
메서드는 실제로 JVM의 현재 기본 시간대를 암묵적으로 적용하고 있습니다.항상 원하는/예상 시간대를 지정하여 명시할 것을 권장합니다.현재의 디폴트존을 사용하고 싶은 경우라도, 그 의도를 명확하게 하기 위해서 명시적으로 말해 주세요.디폴트 타임존을 의도했는지 프로그래머에게 자주 있는 일이기 때문에 타임존을 고려하지 않았는지에 대한 불명확함을 해소합니다.를 호출합니다.
OffsetDateTime odt = OffsetDateTime.now ( ZoneId.systemDefault () );
ZoneOffset zoneOffset = odt.getOffset ();
ZoneId.systemDefault().toString(): America/Los_Angeles
odt: 2017-01-02T15:19:47.162-08:00
zone Offset Of Odt : -08:00
디폴트 존에 의존하기 위한 주의사항:이 기본값은 JVM 내의 임의의 스레드 내의 임의의 코드로 언제든지 변경할 수 있습니다.중요한 경우 사용자에게 원하는 시간대를 묻습니다.
그 시간의 오프셋을 합계 초수로 지정할 수 있습니다.
int offsetSeconds = zoneOffset.getTotalSeconds ();
오프셋 초: -28800
ZonedDateTime
다른예로는 '있다'는 것입니다.아마도 당신은 올해 퀘벡에서 크리스마스 날에 오프셋이 무엇인지 알고 싶을 것이다.을 합니다.America/Montreal
, 를 취득하여 오프셋을 요구합니다.ZoneOffset
★★★★★★ 。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate ld = LocalDate.of( 2017 , 12 , 25 );
ZonedDateTime zdtXmas = ld.atStartOfDay( z );
ZoneOffset zoneOffsetXmas = zdtXmas.getOffset();
zdtXmas.toString(): 2017-12-25T00:00-05:00[미국/몬트리올]
zoneOffsetXmas.toString(): -05:00
zoneOffsetXmas.getTotalSeconds(): -18000
ZoneId
yanys의 코멘트에서 제시된 바와 같이 특정 항목에 대해 질문할 수 있습니다.ZoneOffset
Instant
이 클래스는 타임라인상의 순간을 UTC 단위로 나노초(최대 소수점 이하 9자리)의 분해능으로 나타냅니다.
이것은 같은 행선지로 가는 또 하나의 루트입니다.★★★★★★★★와 같이OffsetDateTime
★★★★★★★★★★★★★★★★★」ZonedDateTime
위에서 설명한 바와 같이 (a) 시간대와 (b) 시간을 지정한다.
Instant instant = zdtXmas.toInstant();
ZoneOffset zo = z.getRules().getOffset( instant );
ZoneId: 미국/몬트리올: 2017-12-25T05:00:00Z의 경우 ZoneOffset은 -05:00입니다.
이 예제의 코드는, IdeOne.com 에서 확인할 수 있습니다.
ZoneOffset.systemDefault
– ★★★★★★★★★★★★★★★★★★*
ZoneOffset
, 서브클래스, ZoneId
는 메서드를 상속하는 것으로 문서화되어 있습니다.그러나 이것은 실제로 효과가 없습니다.
ZoneOffset zoneOffset = ZoneOffset.systemDefault() ; // Fails to compile.
오류: 호환되지 않는 유형: ZoneId를 ZoneOffset으로 변환할 수 없습니다.
이 컴파일 실패가 버그인지 기능인지 확실하지 않습니다.한 바와 같이 하는 것은 의미가 되므로, 「Default 은 「Date-time」으로 할 수 있습니다.그래서 아마ZoneOffset.systemDefault
반드시 실패할 것이다.그러나 문서에는 설명과 함께 그렇게 기재되어 있어야 합니다.
이 문제에 대처하기 위해 문서가 실패했을 때 버그를 제출하려고 했지만, 어디서 어떻게 그런 버그 보고서를 제출해야 할지 결정하지 못하고 있습니다.
태양시 대 정치시
오프셋과 타임존에 대해 좀 더 자세히 설명하겠습니다.
태양 시간은 선사시대부터 사용되어 왔으며, 태양이 바로 머리 위에 있는 때를 주목하여 매일 추적해 왔다.땅에 막대기를 찔러서 그 그림자를 보세요.그림자가 가장 짧을 때, 그림자가 줄어들기 보다는 커지기 시작할 때, 당신은 지금이 정오라는 것을 안다.해시계를 사용하여 시간을 추적합니다.
태양시간과 함께 이 마을 저 마을로 이동하면서 조금 늦게 정오가 찾아옵니다.동쪽으로 이동하면 정오가 조금 더 빨리 도착한다.그래서 모든 마을은 같은 경도를 따라 북쪽과 남쪽에 있는 마을들과만 공유되는 그들만의 정오가 있다.
태양 시간은 현대 시대에 대부분 버려졌다.기차, 전신, 전화가 도착함에 따라, 시간적으로 조정해야 할 필요성도 증가했습니다.그래서 거의 태양 시간인 정오에 해당하는 지점이 선택되었고, 서쪽과 동쪽으로 수 마일 떨어진 넓은 땅은 모두 시계로 12시를 공유한다고 선언되었습니다. 그리니치 프라임 자오선 앞이나 뒤나 같은 시간이 상쇄됩니다.그래서 모든 열차가 눈에 띄게 시계를 표시하여 마을에 태양 시간보다 더 큰 지역의 표준 시간을 알리는 전통이 시작되었다.일반적으로, 그 시간대 지역의 서쪽 가장자리에 있는 마을에서는 해가 지기 조금 전에 기차역 시계가 12시를 가리키게 됩니다.동쪽에 위치한 마을의 시계는 태양이 머리 위로 떠오른 지 얼마 되지 않아 12시를 가리키고 말했다.
전 세계 정치인들은 사법권의 상계(上界)를 바꾸는 경향을 보였다.그 이유는 다양합니다.외교, 전쟁, 점령, 서머타임(DST)의 어리석음 등입니다.이유는 다양하지만, 그 변화는 놀라운 빈도로 나타난다.표준 시간대는 이러한 변경 이력을 추적하기 위해 영역에 붙여진 이름입니다.따라서 UTC로부터의 오프셋은 본초 자오선보다 몇 시간 앞 또는 뒤에 있습니다.타임존은 과거, 현재 및 미래의 역사가 특정 지역의 오프셋에 변경되는 훨씬 더 많은 것입니다.오늘날 두 인접 지역은 UTC와 같은 상계점을 공유하고 있지만 과거나 미래에는 정치인들의 변덕이나 논리에 따라 다를 수 있다.
이 현대 time-tracking 정치인들에 의해 정의된 지리학과는 거의 상관이 없다는 것을 의미한다.예를 들어, 인도의 거대한 나라 오늘 단일 시간대(+05의 offset-from-UTC시 30분) 가지고 있다.그래서 태양 정오(태양 바로 머리 위에 머리)한시간 간격이 있는 방대한 아대륙에 걸쳐 여러 장소에 있다.인도의 정치인들 이 그들의 다양한 민주주의 통일을 돕기로 결심했다.전 세계 다른 예에서 보면, 우리는 지역 그런 그들의 불쾌한 이웃 나라보다, 또는 관계 해빙기로 이웃으로서 최근 북한은 남한에 맞는 변화를에서 보듯이 그 선택 다른 것으로 국제 관계의 상징으로 그들의 시간대를 이용하는 것을 보고.그래서, 요즘 태양 시간은 겨우 한 time-tracking에 몇가지 사항에서.
java.time 정보
java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.
자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.
현재 유지보수 모드에 있는 Joda-Time 프로젝트는 java.time 클래스로의 이행을 권장합니다.
java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후에 준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*
반.휴지 상태 5 및 JPA 2.2는 java.time을 지원합니다.
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로 백포트됩니다.
- 안드로이드
- 최신 버전의 Android(26+) 번들 구현 java.time 클래스.
- 이전의 Android(<26)에서는 API 디스카어링이라고 하는 프로세스가 원래 Android에 내장되어 있지 않은 java.time 기능의 서브셋을 가져옵니다.
- 디스거링이 필요한 기능을 제공하지 않는 경우 ThreeTenABP 프로젝트는 ThreeTen-Backport(상기)를 Android에 적용합니다.「*https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project*」를 참조해 주세요.
목적에 따라서는 완전히 우회할 수 있습니다.
은, 「」뿐이라고 하는 것입니다.ZoneOffset
★★★★★★★★★★★★★★★★★,LocalDateTime.ofEpochSecond()
라고 치환할 수 .
ZoneOffset offset = OffsetDateTime.now().getOffset();
LocalDateTime dt1 = LocalDateTime.ofEpochSecond(seconds, 0, offset);
와 함께
LocalDateTime dt2 = LocalDateTime.ofInstant(
Instant.ofEpochSecond(seconds),
ZoneId.systemDefault());
서 ''는dt1.equals(dt2)
true
.
언급URL : https://stackoverflow.com/questions/41427384/how-to-get-default-zoneoffset-in-java-8
'source' 카테고리의 다른 글
mysql_module_array()/module_module_assoc()/module_module_num_rows 등...파라미터 1이 리소스가 될 것으로 예상합니다. (0) | 2022.09.12 |
---|---|
휴지 상태에서는 MultipleBagFetchException이 느려짐 - 여러 개의 가방을 동시에 가져올 수 없음 (0) | 2022.09.12 |
JavaScript에서 두 숫자 사이의 난수 생성 (0) | 2022.09.12 |
Firebase 클래스에 직렬화할 속성이 없습니다. (0) | 2022.09.12 |
size of(my_arr)[0]이 컴파일되고 size of(my_arr[0])이 같은 이유는 무엇입니까? (0) | 2022.09.12 |