에 싶었지만,이 포매터 만 구문 분석을 위해 사용되며, 서식 지정에 영향을 미치지 않습니다.
날짜를 특정 시간대로 포맷하려면 다른 포맷터에서 설정해야합니다 (설정하지 않으면 JVM 기본 시간대가 사용됩니다). 또한 FastDateFormat
과 같은 다른 클래스에 의존 할 필요가 없으며 다른 SimpleDateFormat
을 사용하기 만하면됩니다.
정확히 동일한 날짜/시간을 얻으려면 입력에 사용 된 것과 동일한 오프셋 (+01:00
)을 사용해야합니다. Date
오브젝트 don't keep this information이므로 입력에서 추출해야합니다. 한 가지 방법은 사용하는 것입니다 substring
:
SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSXXX");
String string1 = "2016-11-25T09:29:10.588+01:00";
Date result1 = df1.parse(string1);
long timeStamp = result1.getTime();
System.out.println("timeStamp : " + timeStamp);
// extract the +01:00 offset from the input
String offset = string1.substring(23);
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
// set the offset in the formatter (so output is converted to it)
df2.setTimeZone(TimeZone.getTimeZone("GMT" + offset));
String eventTime = df2.format(timeStamp);
System.out.println("AfterConverting : " + eventTime);
출력은 다음과 같습니다
소인 1480062550588
AfterConverting : 2016년 11월 25일 09 : 29 : 10.588
하는 경우 FastDateFormat
을 계속 사용하려면 해당 시간대를 설정하는 것이 가능합니다.
FastDateFormat f = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.SSS", TimeZone.getTimeZone("GMT" + offset));
String eventTime = f.format(timeStamp);
자바 새로운 날짜/시간 API
오래된 클래스 (Date
, Calendar
및 SimpleDateFormat
)는 lots of problems 및 design issues 있고, 그들은 새로운 API로 대체되고 있습니다.
Java 7의 경우 Java 8의 새로운 날짜/시간 클래스에 유용한 백 포트 인 ThreeTen Backport을 사용할 수 있습니다. Android의 경우 ThreeTenABP (자세한 사용 방법은 here)이 필요합니다.
이렇게하면 입력을 org.threeten.bp.OffsetDateTime
으로 구문 분석하고 org.threeten.bp.format.DateTimeFormatter
을 출력으로 사용할 수 있습니다.이 경우, OffsetDateTime
는 오프셋 정보를 유지, 그래서 당신은 포맷터에서 그것을 설정할 필요가 없습니다 :
OffsetDateTime odt = OffsetDateTime.parse(string1);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println("timeStamp : " + odt.toInstant().toEpochMilli());
System.out.println("AfterConverting : " + odt.format(fmt));
출력은 동일합니다
소인 1480062550588
AfterConverting : 2016-11-25 09 : 29 : 10.588
"시간대를"UTC "로 설정하려고했으나 도움이되지 않았습니다. - 물론 FastDateFormat의 시간대를 설정하면됩니다. 그건. 시간대 설정 방법을 보여주십시오. –
df1.setTimeZone (TimeZone.getTimeZone ("UTC")); –
@HarshaG 항상 새로운 정보로 질문을 업데이트하십시오 (편집 가능). – timiTao