5

Androidアプリのサーバーから1970年以降のミリ秒数のjson文字列を取得します。

次のようになります\/Date(1358157378910+0100)\/

これを解析して Java カレンダー オブジェクトにする方法、または日付値を取得する方法を教えてください。正規表現から始めて、ミリ秒を取得する必要がありますか? サーバーは .NET です。

ありがとう

4

7 に答える 7

5

時間にもタイムゾーンがあるようですので、次のようにします:

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);
于 2013-01-14T10:43:43.473 に答える
3

受け入れられた回答からコピーされ、いくつかのバグが修正されました:)

    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);
于 2013-03-07T02:59:32.567 に答える
1

私はあなたがこのようになることができると思います:

json.getAsJsonPrimitive().getAsString();

jsonそれはJsonElement

編集:Date()なしで送信できますが、数字だけですよね?また、JSONを使用している場合は、Dateオブジェクトを使用しないのはなぜですか?

于 2013-01-14T10:17:17.677 に答える
1

ええ、「(」から「)」をミリ秒に変換してオブジェクトに渡すことができsubstringます。jsonstringcalendar

String millisString = json.substring(json.indexOf('('), json.indexOf(')'));
于 2013-01-14T10:12:36.390 に答える
0

これを試して..

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();
     }
于 2014-01-10T09:44:38.670 に答える
0

@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);
    }
}
于 2014-08-04T17:20:40.390 に答える