이 날짜 형식은 무엇입니까?2011-08-12T20:17:46.384Z
는 다음과 .2011-08-12T20:17:46.384Z
게게무 ?슨 식? ???1.DateFormat.getDateInstance().parse(dateStr)
나는
java.text.Parse Exception:해석 불가일 : '2011-08-12T20:17:46.384Z'
해석에는 SimpleDateFormat을 사용해야 한다고 생각합니다만, 우선 형식 문자열을 알아야 합니다.지금까지 내가 가진 거라곤yyyy-MM-dd
왜냐하면 난 그게 뭔지 모르기 때문이야T
이 문자열에서 시간대와 관련된 어떤 것을 의미하나요?은 " " 에서 .lcmis:downloadedOn
태그는 [Files CMIS download history media type]에 표시됩니다.
T는 날짜와 시간을 구분하기 위한 리터럴일 뿐이고 Z는 "제로 시간 오프셋"을 의미하며 "줄루 시간"(UTC)이라고도 합니다.문자열에 항상 "Z"가 있는 경우 다음을 사용할 수 있습니다.
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
또는 Joda Time을 사용하여 를 사용할 수 있습니다.
dr;dr
입력 문자열에서 표준 ISO 8601 형식을 사용합니다.
Instant.parse ( "2011-08-12T20:17:46.384Z" )
ISO 8601
이 형식은 실용적인 표준인 ISO 8601에 의해 정의됩니다.
T
는 날짜 부분과 시각 부분을 구분합니다.Z
end는 UTC(즉, UTC로부터의 오프셋)를 의미합니다.그Z
'줄루'로 발음됩니다.
java.time
Java의 초기 버전과 함께 번들된 오래된 날짜 클래스는 설계가 부실하고 혼란스러우며 번거롭다는 것이 입증되었습니다.그들을 피하세요.
대신 Java 8 이후에 내장된 java.time 프레임워크를 사용합니다.java.time 클래스는 오래된 날짜 시간 클래스와 매우 성공적인 Joda-Time 라이브러리를 모두 대체합니다.
java.time 클래스는 날짜 값의 텍스트 표현을 해석/생성할 때 기본적으로 ISO 8601을 사용합니다.
클래스는 타임라인상의 시간을 UTC 단위로 나노초의 분해능으로 나타냅니다.이 클래스는 포맷 패턴을 정의할 필요 없이 입력 문자열을 직접 해석할 수 있습니다.
Instant instant = Instant.parse ( "2011-08-12T20:17:46.384Z" ) ;
java.time 정보
java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.
자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.
현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.
java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후에 준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*
반.휴지 상태 5 및 JPA 2.2는 java.time을 지원합니다.
java.time 클래스는 어디서 얻을 수 있습니까?
- 자바 SE 8, 자바 SE 9, 자바 SE 10, 자바 SE 11 및 이후 - 표준 Java API의 일부이며 번들 구현이 포함되어 있습니다.
- 자바 9는 몇 가지 사소한 기능과 수정을 제공했습니다.
- 자바 SE 6 및 자바 SE 7
- java.time 기능의 대부분은 ThreeTen 백포트의 Java 6 및7로 백포트됩니다.
- 안드로이드
- 최신 버전의 Android(26+) 번들 구현 java.time 클래스.
- 이전의 Android(<26)에서는 API 디스카어링이라고 하는 프로세스가 원래 Android에 내장되어 있지 않은 java.time 기능의 서브셋을 가져옵니다.
- 디스거링이 필요한 기능을 제공하지 않는 경우 쓰리텐ABP 프로젝트는 ThreeTen-Backport(상기)를 Android에 적용합니다.'쓰리텐ABP 사용방법'을 참조하십시오.
Java 해석에 대해서는 잘 모르지만 ISO8601:http://en.wikipedia.org/wiki/ISO_8601
첫 번째 답변이 아닌 다른 해석 방법이 있습니다.★★★★★★★★★★★★★★★★★★:
1) 를 얻고 는 (1) 시기로 ZonedDatetime
(Java 8 이후) 또는Date
오브젝트 (오래된) 오브젝트:
// ZonedDateTime's default format requires a zone ID(like [Australia/Sydney]) in the end.
// Here, we provide a format which can parse the string correctly.
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE_TIME;
ZonedDateTime zdt = ZonedDateTime.parse("2011-08-12T20:17:46.384Z", dtf);
또는
// 'T' is a literal.
// 'X' is ISO Zone Offset[like +01, -08]; For UTC, it is interpreted as 'Z'(Zero) literal.
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX";
// since no built-in format, we provides pattern directly.
DateFormat df = new SimpleDateFormat(pattern);
Date myDate = df.parse("2011-08-12T20:17:46.384Z");
2) 않고 단위로 처리하고 (2) 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,Instant
:
// The ISO format without zone ID is Instant's default.
// There is no need to pass any format.
Instant ins = Instant.parse("2011-08-12T20:17:46.384Z");
java.time
없다DateTimeFormatter
지정된 날짜/시간 문자열을 해석합니다.
Java SE 8 Date-Time API()java.time
API 또는 최신 Date-Time API)는 ISO 8601을 기반으로 하며,DateTimeFormatter
날짜-시간 문자열이 ISO 8601 표준을 준수하는 한 명시적으로 개체를 지정합니다.
Z
string은 제로 타임존 오프셋의 타임존 지정자입니다.이것은 Zulu를 의미하며,Etc/UTC
)+00:00
□□□□□□□□★
T
문자열에는 ISO-8601 표준에 따라 날짜-시간 구분 기호만 있습니다.
데모:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
String strDateTime = "2011-08-12T20:17:46.384Z";
Instant instant = Instant.parse(strDateTime);
OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime);
System.out.println(instant);
System.out.println(odt);
System.out.println(zdt);
}
}
출력:
2011-08-12T20:17:46.384Z
2011-08-12T20:17:46.384Z
2011-08-12T20:17:46.384Z
★★★의 java.time
Trail: Date Time의 최신 Date-Time* API.
레거시 Date-time API
APIDate-time API」)java.util
Date-Time API와 그 포맷 API,SimpleDateFormat
)는 오래되어 오류가 발생하기 쉽습니다.완전히 사용을 중지하고 최신 Date-Time* API로 전환하는 것이 좋습니다.
완성도를 높이기 위해 레거시 API를 사용하여 이 Date-Time 문자열을 해석하는 솔루션을 작성했습니다.
「 」를하지 주세요.'Z'
Date-Time API 입니다.
한 바와 같이, 「 」는, 「 」입니다.Z
따옴표 은 제로 이며, (따옴표 없음)는 제로 타임존 오프셋의 지정자입니다.'Z'
문자 그대로일 뿐 아무런 의미도 없습니다. 하다라는 쓰세요.y-M-d'T'H:m:s.SSSXXX
이러한 기호에 대한 자세한 내용은 설명서를 참조하십시오.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) throws ParseException {
String strDateTime = "2011-08-12T20:17:46.384Z";
SimpleDateFormat sdf = new SimpleDateFormat("y-M-d'T'H:m:s.SSSXXX", Locale.ENGLISH);
Date date = sdf.parse(strDateTime);
// ...
}
}
과 같습니다.java.util.Date
오브젝트는 현대의 Date-Time 타입과 같은 실제 Date-Time 오브젝트가 아닙니다.오브젝트는 표준 베이스 타임으로부터 「에폭」으로 알려진 밀리초수를 나타냅니다.January 1, 1970, 00:00:00 GMT
( 는 utc UTC ) 및 즉 시간대가 적용되지 .EEE MMM dd HH:mm:ss z yyyy
하여 JVM의 을 반환합니다.Date#toString
이 밀리초 값에서 파생됩니다.할 필요가 있는 는, 「을 가 있습니다.SimpleDateFormat
원하는 형식과 적용 가능한 시간대를 지정합니다.
sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String formatted = sdf.format(date);
System.out.println(formatted); // 2011-8-12T20:17:46.384Z
Joda 날짜-시간 API
Joda-Time 홈페이지 공지사항은 다음과 같습니다.
Java SE 8 이후 사용자는 이 프로젝트를 대체하는 JDK의 핵심 부분인 java.time(JSR-310)으로 마이그레이션해야 합니다.
다시 한 번 말씀드리지만, 저는 Joda Date-Time API를 사용하여 이 Date-Time 문자열을 해석하는 솔루션을 작성했습니다.
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String dateTimeStr = "2011-08-12T20:17:46.384Z";
DateTimeFormatter dtf = DateTimeFormat.forPattern("y-M-d'T'H:m:s.SSSZ").withOffsetParsed();
DateTime dateTime = dtf.parseDateTime(dateTimeStr);
System.out.println(dateTime);
}
}
출력:
2011-08-12T20:17:46.384Z
* 어떤 이유로든 Java 6 또는 Java 7을 고수해야 하는 경우 Java 6 및 7에 대한 대부분의 java.time 기능을 백포트하는 ThreeTen 백포트를 사용할 수 있습니다.Android 프로젝트에 종사하고 있으며 Android API 레벨이 여전히 Java-8과 호환되지 않는 경우, 디수깅 및 사용 방법을 통해 사용 가능한 Java 8+ API를 확인하십시오.Android Project의 ABP.
Android용 솔루션을 찾고 있다면 다음 코드를 사용하여 타임스탬프 문자열에서 에폭초(Epoch seconds)를 얻을 수 있습니다.
public static long timestampToEpochSeconds(String srcTimestamp) {
long epoch = 0;
try {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
Instant instant = Instant.parse(srcTimestamp);
epoch = instant.getEpochSecond();
} else {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSSS'Z'", Locale.getDefault());
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = sdf.parse(srcTimestamp);
if (date != null) {
epoch = date.getTime() / 1000;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return epoch;
}
입력 예: 2019-10-15T05:51:31.537979Z
출력 예: 1571128673
자바스크립트
let isoDateTimeString = new Date().toISOString();
묘사
"YYY-MM-DDTh:mm:ss.SSSZ"와 같은 날짜/시간 형식은 ISO 8601 날짜/시간 형식입니다.
다음 예를 사용할 수 있습니다.
String date = "2011-08-12T20:17:46.384Z";
String inputPattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
String outputPattern = "yyyy-MM-dd HH:mm:ss";
LocalDateTime inputDate = null;
String outputDate = null;
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(inputPattern, Locale.ENGLISH);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputPattern, Locale.ENGLISH);
inputDate = LocalDateTime.parse(date, inputFormatter);
outputDate = outputFormatter.format(inputDate);
System.out.println("inputDate: " + inputDate);
System.out.println("outputDate: " + outputDate);
이 기술은 java.util을 변환합니다.UTC 형식(또는 다른 형식)으로 날짜 지정 후 다시 돌아옵니다.
다음과 같이 클래스를 정의합니다.
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class UtcUtility {
public static DateTimeFormatter UTC = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZoneUTC();
public static Date parse(DateTimeFormatter dateTimeFormatter, String date) {
return dateTimeFormatter.parseDateTime(date).toDate();
}
public static String format(DateTimeFormatter dateTimeFormatter, Date date) {
return format(dateTimeFormatter, date.getTime());
}
private static String format(DateTimeFormatter dateTimeFormatter, long timeInMillis) {
DateTime dateTime = new DateTime(timeInMillis);
String formattedString = dateTimeFormatter.print(dateTime);
return formattedString;
}
}
그런 다음 다음과 같이 사용합니다.
Date date = format(UTC, "2020-04-19T00:30:07.000Z")
또는
String date = parse(UTC, new Date())
필요에 따라서(UTC 뿐만이 아니라) 다른 날짜 형식을 정의할 수도 있습니다.
@John-Skeet는 나에게 이 문제를 해결할 수 있는 실마리를 주었다.젊은 프로그래머로서 이 작은 문제는 놓치기 쉽고 진단하기도 어렵습니다.그래서 저는 누군가에게 도움이 되길 바라며 그것을 공유합니다.
문제는 영향을 미치지 않는 JSON의 타임스탬프를 포함하는 다음 문자열을 해석하여 보다 유용한 변수에 넣는 것이었습니다.그런데 자꾸 오류가 나더라고요.
따라서 다음과 같이 지정됩니다(Pattern() 내의 문자열 파라미터에 주의해 주십시오.
String str = "20190927T182730.000Z"
LocalDateTime fin;
fin = LocalDateTime.parse( str, DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss.SSSZ") );
오류:
Exception in thread "main" java.time.format.DateTimeParseException: Text
'20190927T182730.000Z' could not be parsed at index 19
?? 는 '처럼 .패턴의 끝에 있는 Z는 'T'와 마찬가지로 'Z'로 감싸야 합니다."yyyyMMdd'T'HHmmss.SSSZ"
로로 합니다."yyyyMMdd'T'HHmmss.SSS'Z'"
그리고 그것은 동작한다.
패턴에서 Z를 모두 삭제해도 오류가 발생합니다.
솔직히 자바 클래스가 이걸 예상했을 거예요.
언급URL : https://stackoverflow.com/questions/8405087/what-is-this-date-format-2011-08-12t201746-384z
'source' 카테고리의 다른 글
부트스트랩 3 모달은 vue 2와 함께 표시되지 않음 (0) | 2022.08.20 |
---|---|
상위 구성 요소에서 하위 속성 변경 내용을 보는 방법 (0) | 2022.08.20 |
웹 소켓 돌연변이를 사용하여 vuex를 구성하는 방법 (0) | 2022.08.20 |
Java에서 일반 텍스트 파일 읽기 (0) | 2022.08.20 |
매개 변수화된 테스트 이름 변경 (0) | 2022.08.19 |