자바 8 날짜/시간 프레임 워크가 어떻게 작동하는지 이해하려고합니다.SimpleDateFormat to java.time
new SimpleDateFormat("yyyyMMddHHmmssSSS").parse(builder.toString()).getTime();
가 자바 8의 새로운 클래스로 무엇을 될 것입니다 :
나는 실제로 문자열을 주어진 밀리 초를 반환하는이 방법하여 SimpleDateFormat을 사용하고 있습니다?
자바 8 날짜/시간 프레임 워크가 어떻게 작동하는지 이해하려고합니다.SimpleDateFormat to java.time
new SimpleDateFormat("yyyyMMddHHmmssSSS").parse(builder.toString()).getTime();
가 자바 8의 새로운 클래스로 무엇을 될 것입니다 :
나는 실제로 문자열을 주어진 밀리 초를 반환하는이 방법하여 SimpleDateFormat을 사용하고 있습니다?
패턴 자바-8에서 작동하지 않을 수 있습니다. 문제는 겉으로보기에는 백 포트가없는 fixed in Java-9이지만 Java-9는 아직 릴리스되지 않았습니다. 자바-8에 대한
가능한 해결 방법 중 하나는 어색 문자열 전처리, 즉 분수 부분 전에 소수 구분 기호를 삽입하거나 파서 아마 자바-9에있어서보다 여전히 빠른 곳 (다른 제 3 자-라이브러리를 다운로드 포함) 내 관측 :
문자열 전처리
String mydate = "20130812214600025";
String adjustedInput = new StringBuilder(mydate).insert(14, '.').toString();
ZonedDateTime date =
ZonedDateTime.parse(
adjustedInput,
DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SSS").withZone(ZoneOffset.systemDefault()));
System.out.println(date); // 2013-08-12T21:46:00.025+02:00[Europe/Berlin]
System.out.println(date.toInstant().toEpochMilli()); // 1376336760025
Joda 타임 :
,String mydate = "20130812214600025";
DateTime date =
DateTime.parse(
mydate,
DateTimeFormat.forPattern("yyyyMMddHHmmssSSS"));
System.out.println(date); // 2013-08-12T21:46:00.025+02:00
System.out.println(date.toInstant().getMillis()); // 1376336760025
내 라이브러리 Time4J
당신의 내용long millisSinceUnix =
ChronoFormatter.ofPattern(
"yyyyMMddHHmmssSSS",
PatternType.CLDR,
Locale.ROOT,
Moment.axis(TemporalType.MILLIS_SINCE_UNIX)
).with(Timezone.ofSystem()).parse(mydate).longValue();
System.out.println(millisSinceUnix); // 1376336760025
: 시간대는 우리가 글로벌 순간에 년, 월, 일, 시간 등과 같은 지역 정보를 변환하기 때문에 필요한 있지만 귀하의 입력은 포함되지 않습니다 모든 존 또는 오프셋 정보. 따라서 포맷터에 영역 또는 오프셋을 제공해야합니다.
보시다시피, SimpleDateFormat
과 Joda-Time은 시스템 시간대를 기본적으로 (암시 적으로) 사용합니다. 그러나 java.time
-API 및 Time4J는 명시 적으로 시간대를 지정해야합니다 (더 선명한 디자인이 아닌 경우).
당신은 사용할 수 있습니다 : 지정한
ZonedDateTime date = ZonedDateTime.parse("mydate",DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
System.out.println(date.toInstant().toEpochMilli());
줘이 : 텍스트 '20140920111703000'을 (를) 인덱스 0에서 파싱 할 수 없습니다. – LppEdd
원하는 형식이 표준 [ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601) 형식에 가깝습니다. 나 자신의 발명보다는 표준 포맷을 고집하는 것이 좋습니다. 표준은 모호함을 피하기 위해 현명하게 설계되었습니다. 그리고 이것들은 기본적으로 java.time 클래스에서 문자열 파싱/생성을 위해 사용됩니다. 형식이 "기본"버전에 가깝기 때문에 구분 기호 사용이 최소화됩니다. (a) 년 - 월 - 일과시 - 분 - 초 부분 사이에 'T'를 삽입하고, (b) 분수 초 앞에 쉼표 (바람직하게) 또는 완전 정지 (마침표)를 삽입하십시오 . –