문제

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");

나는 만들었다 InternetDateFormat RFC3339에 대한 클래스.

그러나 소스 코드 댓글은 일본어입니다.

추신 : 나는 영어 에디션과 리팩토링을 조금 만들었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top