Java SimpleDateFormat("yyy-MM-dd'T'")HH:mm:ss'Z'") 시간대를 IST로 지정합니다.
SimpleDateFormat 컨스트럭터를 사용하고 있다.
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
저는 을 해석하고 있습니다."2013-09-29T18:46:19Z".
서 'Z'는 'Z'를 요.GMT/UTC
에서 이 된 datetimezone의 됩니다. 단, 콘솔에서 이 날짜를 인쇄하면 반환된 날짜의 IST timezne이 출력됩니다.
이제 제 질문은 제 출력이 옳은가 그른가 하는 것입니다.
Z
GMT 날짜/시간으로 표시되지만 값은 변경되지 않습니다.
시간대를 GMT로 설정하면 정확합니다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
'T'
★★★★★★★★★★★★★★★★★」'Z'
이치노요.Z
.또한 입력 문자열에 시간대를 지정해야 합니다.
::2013-09-29T18:46:19-0700
도 ㅇㅇㅇㅇㅇㅇㅇㅇ로."yyyy-MM-dd'T'HH:mm:ssZ"
ISO 8601 문자열에서 Java 날짜 개체로
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
sdf.parse("2013-09-29T18:46:19Z"); //prints-> Mon Sep 30 02:46:19 CST 2013
설정하지TimeZone.getTimeZone("GMT")
그럼그러면 출력됩니다를 출력합니다.Sun Sep 29 18:46:19 CST 2013
Java 날짜 개체에서 ISO 8601 문자열로
그리고로 개종그리고변환하기 위해Date
ISO8601기준에 개체(ISO8601표준에 대한 반대(.yyyy-MM-dd'T'HH:mm:ss'Z'
코드)다음코드를 사용합니다에 이어)사용이다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(new Date())); //-prints-> 2015-01-22T03:23:26Z
또한 또 없이, 이 기능이를 지적한다 없으면' '
ZZ에서에yyyy-MM-dd'T'HH:mm:ssZ
지문 인쇄하다2015-01-22T03:41:02+0000
날짜의 '표준' JSON 표현을 처리하려면 다음 패턴을 사용하는 것이 좋습니다."yyyy-MM-dd'T'HH:mm:ssX"
.
유의 주의:X
마지막에.ISO 8601 표준에서 시간대를 처리하며, ISO 8601은 Javascript에서 이 문을 생성하는 것입니다.new Date().toJSON()
다른 답변과 비교하여 다음과 같은 이점이 있습니다.
- 고객에게 GMT로 날짜를 전송하도록 요구할 필요는 없습니다.
- 당신은 명시적으로 GMT이걸로 당신의 날짜 변환하기:개체를 GMT로필요는 없습니다 변환할 명시적으로사용하여 날짜 다음을 필요가 없다.
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
dr;dr
다른 답변은 Java 8에서 구식입니다.
Instant // Represent a moment in UTC.
.parse( "2013-09-29T18:46:19Z" ) // Parse text in standard ISO 8601 format where the `Z` means UTC, pronounces “Zulu”.
.atZone( // Adjust from UTC to a time zone.
ZoneId.of( "Asia/Kolkata" )
) // Returns a `ZonedDateTime` object.
ISO 8601
문자열 형식이 ISO 8601 표준을 준수합니다.이 표준은 다양한 날짜-시간 값을 텍스트로 표현하기 위한 합리적인 형식을 정의합니다.
java.time
늙은 옛것java.util.Date
끓여.Calendar
★★★★★★★★★★★★★★★★★」java.text.SimpleDateFormat
클래스는 Java 8 이후에 내장된 java.time 프레임워크로 대체되었습니다.튜토리얼을 참조해 주세요.오래된 클래스는 설계가 서툴고 혼란스러우며 번거롭기 때문에 피하는 것이 좋습니다.
는 구식 수업의 서투른 디자인 중 일부가 당신을 괴롭혔다는 가난한 디자인의 오래 된 수업에서 일부분, 당신은 물어뜯었다.toString
method는 실제로 UTC(GMT)로 표시되는 날짜 값의 텍스트 표현을 생성할 때 JVM의 현재 기본 시간대를 적용합니다.이것은 선의이지만 혼란스러운 것입니다.
java.time 클래스는 날짜 값의 텍스트 표현을 해석/생성할 때 기본적으로 ISO 8601 형식을 사용합니다.따라서 구문 분석 패턴을 지정할 필요가 없습니다.
는 UTC 시간대의 시간입니다.
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
필요에 따라 시간대를 적용하여 개체를 생성할 수 있습니다.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );
java8을 사용할 수 있는 옵션이 없다면 'yyy-MM-dd'T'를 사용하는 것이 좋습니다.다시 올바르게 해석되면 HH:mm:ssXX'가 표시됩니다(단, X가 1개뿐인 경우는 그렇지 않을 수 있습니다).해석 기능에 따라 다름)
X 생성: +01
XXX 생성: +01:00
'Z'
않다Z
'Z'
문자 그대로입니다만,Z
는 제로 타임존 오프셋의 타임존 지정자입니다.이것은 Zulu를 의미하며,Etc/UTC
)+00:00
□□□□□□□□★
따라서 구문 분석/포맷을 위한 패턴에서는 사용하지 마십시오.
java.time
API, Date-Time API
최신 Date-Time API는 ISO 8601을 기반으로 하며,DateTimeFormatter
날짜-시간 문자열이 ISO 8601 표준을 준수하는 한 명시적으로 개체를 지정합니다. 문자열, Date-Time ",2013-09-29T18:46:19Z
ISO 8601 표 iso iso iso iso iso iso iso iso iso iso.
데모:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
Instant instant = Instant.parse("2013-09-29T18:46:19Z");
OffsetDateTime odt = OffsetDateTime.parse("2013-09-29T18:46:19Z");
ZonedDateTime zdt = ZonedDateTime.parse("2013-09-29T18:46:19Z");
System.out.println(instant);
System.out.println(odt);
System.out.println(zdt);
}
}
출력:
2013-09-29T18:46:19Z
2013-09-29T18:46:19Z
2013-09-29T18:46:19Z
는 타임라인의 순간 포인트를 UTC로 나타냅니다.그Z
출력은 제로 타임존 오프셋의 타임존 지정자입니다.이것은 Zulu를 의미하며,Etc/UTC
)+00:00
□□□□□□□□★
주의 #1: 다음 날짜 및 시간을 확인할 필요가 있는 경우Instant
특정 시간대를 나타냅니다.예를 들어, 다음의 코드가 날짜와 시간을 인쇄합니다.Instant
★★★★
ZonedDateTime zdtIndia = instant.atZone(ZoneId.of("Asia/Kolkata"));
System.out.println(zdtIndia);
합니다.ZonedDateTime
예를 들어, 다음 코드가 변환됩니다.zdt
을 향하여ZonedDateTime
이치
ZonedDateTime zdtIndia = zdt.withZoneSameInstant(ZoneId.of("Asia/Kolkata"));
System.out.println(zdtIndia);
주의 #2: 어떤 이유로든 이 오브젝트를 변환할 필요가 있는 경우Instant
을 향하여java.util.Date
이치노
Date date = Date.from(instant);
의 오브젝트를 변환할 수도 있습니다.OffsetDateTime
★★★★★★★★★★★★★★★★★」ZonedDateTime
을 향하여java.util.Date
음음음같 뭇매하다
Date date = Date.from(odt.toInstant());
&
Date date = Date.from(zdt.toInstant());
Trail: Date Time에서 최신 Date-Time* API에 대해 자세히 알아보십시오.
의 ?를 사용했습니까?java.util.Date
브젝트 도도 짜짜 ?? ???
A java.util.Date
object는 단순히 "에폭"으로 알려진 표준 기준 시간(즉 1970년 1월 1일 00:00:00 GMT(또는 UTC) 이후 시간)을 나타냅니다.타임존 정보를 보유하지 않기 때문에 이 함수는 JVM의 타임존을 적용하여 타임존을 반환한다.String
포맷으로,EEE MMM dd HH:mm:ss zzz yyyy
는, 이 밀리초치로부터 취득됩니다.입수 방법String
의 표현java.util.Date
다른 형식과 타임존의 오브젝트를 사용해야 합니다.SimpleDateFormat
원하는 형식과 적용 가능한 시간대를 지정합니다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
String strDate = sdf.format(date);
System.out.println(strDate);
데모:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
Date date = sdf.parse("2013-09-29T18:46:19Z");
// In JVM's timezone and default format as returned by Date#toString
System.out.println(date);
// In UTC and custom format
sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String strDate = sdf.format(date);
System.out.println(strDate);
// In India and custom format
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
strDate = sdf.format(date);
System.out.println(strDate);
}
}
출력(시간대는 유럽/런던):
Sun Sep 29 19:46:19 BST 2013
2013-09-29T18:46:19Z
2013-09-30T00:16:19+05:30
* 어떤 이유로든 Java 6 또는 Java 7을 고수해야 하는 경우 Java 6 및 7에 대한 대부분의 java.time 기능을 백포트하는 ThreeTen 백포트를 사용할 수 있습니다.Android 프로젝트에 종사하고 있으며 Android API 레벨이 여전히 Java-8과 호환되지 않는 경우, 디수깅 및 사용 방법을 통해 사용 가능한 Java 8+ API를 확인하십시오.Android Project의 ABP.
Java 8의 경우: 빌트 사용 가능java.time.format.DateTimeFormatter
오타를 줄일 수 있다
DateTimeFormatter formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
ISO_ZONED_DATE_TIME은 다음을 나타냅니다.2011-12-03T10:15:30+01:00[Europe/Paris]
는 Oracle 링크에서 제공되는 표준 DateTime 형식 중 하나입니다.
언급URL : https://stackoverflow.com/questions/19112357/java-simpledateformatyyyy-mm-ddthhmmssz-gives-timezone-as-ist
'programing' 카테고리의 다른 글
Synchronized(이것)를 사용할 수 있는데 ReentrantLock을 사용하는 이유는 무엇입니까? (0) | 2022.08.09 |
---|---|
퀘이사 프레임워크에서 전역 개체를 저장할 위치 (0) | 2022.08.09 |
스플라이스가 제대로 작동하지 않음 내 객체 목록 VueJs (0) | 2022.08.09 |
GET 매개 변수에 허용되는 문자 (0) | 2021.01.19 |
= 연산자가 정의되지 않은 구조체에서 작동하는 이유는 무엇입니까? (0) | 2021.01.19 |