Androidアプリのサーバーから1970年以降のミリ秒数のjson文字列を取得します。
次のようになります\/Date(1358157378910+0100)\/
。
これを解析して Java カレンダー オブジェクトにする方法、または日付値を取得する方法を教えてください。正規表現から始めて、ミリ秒を取得する必要がありますか? サーバーは .NET です。
ありがとう
時間にもタイムゾーンがあるようですので、次のようにします:
String timeString = json.substring(json.indexOf("(") + 1, json.indexOf(")"));
String[] timeSegments = timeString.split("\\+");
// May have to handle negative timezones
int timeZoneOffSet = Integer.valueOf(timeSegments[1]) * 36000; // (("0100" / 100) * 3600 * 1000)
int millis = Integer.valueOf(timeSegments[0]);
Date time = new Date(millis + timeZoneOffSet);
受け入れられた回答からコピーされ、いくつかのバグが修正されました:)
String json = "Date(1358157378910+0100)";
String timeString = json.substring(json.indexOf("(") + 1, json.indexOf(")"));
String[] timeSegments = timeString.split("\\+");
// May have to handle negative timezones
int timeZoneOffSet = Integer.valueOf(timeSegments[1]) * 36000; // (("0100" / 100) * 3600 * 1000)
long millis = Long.valueOf(timeSegments[0]);
Date time = new Date(millis + timeZoneOffSet);
System.out.println(time);
私はあなたがこのようになることができると思います:
json.getAsJsonPrimitive().getAsString();
json
それはJsonElement
編集:Date()なしで送信できますが、数字だけですよね?また、JSONを使用している場合は、Dateオブジェクトを使用しないのはなぜですか?
ええ、「(」から「)」をミリ秒に変換してオブジェクトに渡すことができsubstring
ます。json
string
calendar
String millisString = json.substring(json.indexOf('('), json.indexOf(')'));
これを試して..
String jsonDate = "\/Date(1358157378910+0100)\/";
String date = "";
try {
String results = jsonDate.replaceAll("^/Date\\(","");
results = results.substring(0, results.indexOf('+'));
long time = Long.parseLong(results);
Date myDate = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");
date = sdf.format(myDate);
System.out.println("Result Date: "+date);
}
catch (Exception ex) {
ex.printStackTrace();
}
@pabliscoの回答に基づく、より完全なソリューションを次に示します。
public class DateUtils {
public static Date parseString(String date) {
String value = date.replaceFirst("\\D+([^\\)]+).+", "$1");
//Timezone could be either positive or negative
String[] timeComponents = value.split("[\\-\\+]");
long time = Long.parseLong(timeComponents[0]);
int timeZoneOffset = Integer.valueOf(timeComponents[1]) * 36000; // (("0100" / 100) * 3600 * 1000)
//If Timezone is negative
if(value.indexOf("-") > 0){
timeZoneOffset *= -1;
}
//Remember that time could be either positive or negative (ie: date before 1/1/1970)
time += timeZoneOffset;
return new Date(time);
}
}