출력 RFC 3339 Java의 타임 스탬프
문제
PST 오프셋으로 타임 스탬프를 출력하고 싶습니다 (예 : 2008-11-13T13 : 23 : 30-08 : 00). java.util.SimpleDateFormat
The Timezone 오프셋을 출력하지 않는 것 같습니다 시간 : 분 형식은 결장을 제외합니다. Java에서 타임 스탬프를 얻는 간단한 방법이 있습니까?
// I want 2008-11-13T12:23:30-08:00
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").format(new Date());
System.out.println(timestamp);
// prints "2008-11-13T12:23:30-0800" See the difference?
또한, SimpleDateFormat
위의 예를 제대로 구문 분석 할 수 없습니다. 던지는 a ParseException
.
// Throws a ParseException
new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").parse("2008-11-13T13:23:30-08:00")
해결책
Java 7에서 시작하여 있습니다 X
ISO8601 시간대의 패턴 문자열. 설명하는 형식의 문자열의 경우 사용합니다 XXX
. 문서를 참조하십시오.
견본:
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
.format(new Date()));
결과:
2014-03-31T14:11:29+02:00
다른 팁
확인하십시오 조다 시간 패키지. 그들은 RFC 3339 날짜 서식을 훨씬 쉽게 만듭니다.
Joda 예 :
DateTime dt = new DateTime(2011,1,2,12,45,0,0, DateTimeZone.UTC);
DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
String outRfc = fmt.print(dt);
"Get It Done Dept"에서 SimpledateFormat이 완료된 후 regexes를 사용하여 문자열을 수정하는 것입니다. s/( d {2}) ( d {2}) $/$ 1 : $ 2/와 같은 것.
원격으로 관심이 있다면이 응답을 작동하는 Java 코드로 편집하겠습니다.
하지만 그래. 나도이 문제를 겪고 있습니다. RFC3339, 나는 당신을보고 있습니다!
편집하다:
이것은 나를 위해 작동합니다
// As a private class member
private SimpleDateFormat rfc3339 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String toRFC3339(Date d)
{
return rfc3339.format(d).replaceAll("(\\d\\d)(\\d\\d)$", "$1:$2");
}
나는 같은 문제에 대한 답을 찾기 위해 많은 시간을 보냈고 여기서 무언가를 찾았습니다. http://developer.android.com/reference/java/text/simpledateformat.html
제안 된 답변 :
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZZZZZ").format(new Date());
당신이 알면 내가 하나 대신 5 'z'를 사용하고 있습니다. 이것은 "2008-11-13T12 : 23 : 30-08 : 00"과 같은 오프셋에서 결장과 출력을 제공합니다. 도움이되기를 바랍니다.
문제는 Z가 콜론없이 시간대 오프셋을 생성한다는 것입니다 (:) 분리기로서.
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ss.SZ");
정확히 필요한 것이 아닌가?
문제를 해결하는 데 도움이되는 길 잃은 페이스트 빈을 발견했습니다. http://pastebin.com/y3tcaikc
내용이 나중에 삭제되는 경우를 대비하여 :
// I want 2008-11-13T12:23:30-08:00
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").format(new Date());
System.out.println(timestamp);
// prints "2008-11-13T12:23:30-0800" See the difference?
// Throws a ParseException
new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").parse("2008-11-13T13:23:30-08:00")
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ss.SZ");