Jsonで2011-10-26T20:29:59-07:00
として日付/時刻を取得しています。 gsonBuilder.setDateFormat
を使用して今回適切にフォーマットする適切な方法は何ですか?
-07:00
はISO 8601タイムゾーン表記です。これは、 Java 7 までSimpleDateFormat
でサポートされていません。したがって、 pgrade to Java 7)が可能な場合、X
を使用してそのタイムゾーン表記を表すことができます。
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssX").create();
Java 6 では、-07:00
RFC 822表記による部分-0700
を使用して、Z
を使用できるようにします。
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create();
または、一般的なタイムゾーン表記GMT-07:00
を使用して、z
を使用できるようにします。
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssz").create();
Java 8(Java 7について検証していない)の場合、パターンを使用するだけ
yyyy-MM-dd'T'HH:mm:ssXXX
2011-10-26T20:29:59-07:00
の形式を正確に取得するため。
タイムゾーンパターンは Java Date Time-Custom Date Format Patterns
Zone offset Example: X +09 XX +0930 XXX +09:30 XXX -05:00 XXXX +093045 XXXXX +08:30:45
私のAPIレスポンスの日付形式は次のようにあなたのものとまったく同じです:
"weather": {
"temperature": 31,
"time": "2016-06-23T09:28:38+08:00"
}
in Android project、私は次のコードを使用します。両方とも私のために働きます。
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.create();
// or, also work
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
.create();
"yyyy-MM-dd'T'HH:mm:ssX"
はAndroidで機能しませんが、build.gradle
でJava 8を使用)を設定しました。
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
設定する日付形式をどのように知ることができますか。実際、SimpleDateFormat.Java
のソースコードから答えを見つけることができます。
* <p>Which produces this output when run in the America/Los_Angeles time zone:
* <pre>
* yyyy-MM-dd 1969-12-31
* yyyy-MM-dd 1970-01-01
* yyyy-MM-dd HH:mm 1969-12-31 16:00
* yyyy-MM-dd HH:mm 1970-01-01 00:00
* yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800
* yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000
* yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800
* yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000
* yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800
* yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000
* </pre>
これが投稿されてからしばらく経ちましたが、GSONを使用してこの日付形式のAPI応答を解析しようとすると、それに遭遇しました。正規表現を使用して作成した2つの小さな関数を共有して、すべての日付を検索し、GSONが解析できる形式に変更すると考えました。
private static String cleanDateFormat(String json){ // takes in a string of JSON
Pattern regex = Pattern.compile("\\d\\d:\\d\\d:\\d\\d[-\\+]\\d\\d:\\d\\d");
Matcher regexMatcher = regex.matcher(json);
StringBuffer buff = new StringBuffer();
while(regexMatcher.find()){
regexMatcher.appendReplacement(buff, getSubOfMatch(regexMatcher));
}
regexMatcher.appendTail(buff);
return buff.toString();
}
//then pull out the colon.
private static String getSubOfMatch(Matcher matcher){
StringBuilder sb = new StringBuilder(matcher.group(0));
sb.deleteCharAt(sb.length()-3);
return sb.toString();
}