programing

Java SimpleDateFormat("yyy-MM-dd'T'")HH:mm:ss'Z'") 시간대를 IST로 지정합니다.

projobs 2022. 8. 9. 22:26
반응형

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이 출력됩니다.

이제 제 질문은 제 출력이 옳은가 그른가 하는 것입니다.

ZGMT 날짜/시간으로 표시되지만 값은 변경되지 않습니다.

시간대를 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 문자열로

그리고로 개종그리고변환하기 위해DateISO8601기준에 개체(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()

다른 답변과 비교하여 다음과 같은 이점이 있습니다.

  1. 고객에게 GMT로 날짜를 전송하도록 요구할 필요는 없습니다.
  2. 당신은 명시적으로 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 프레임워크로 대체되었습니다.튜토리얼을 참조해 주세요.오래된 클래스는 설계가 서툴고 혼란스러우며 번거롭기 때문에 피하는 것이 좋습니다.

는 구식 수업의 서투른 디자인 중 일부가 당신을 괴롭혔다는 가난한 디자인의 오래 된 수업에서 일부분, 당신은 물어뜯었다.toStringmethod는 실제로 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 );

Java의 날짜 유형 표(현대 및 레거시 모두)

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:19ZISO 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

ONLINE DEMO

는 타임라인의 순간 포인트를 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.Dateobject는 단순히 "에폭"으로 알려진 표준 기준 시간(즉 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

ONLINE DEMO


* 어떤 이유로든 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

반응형