Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android上使用GSON将JSON日期格式解析为字符串_Java_Android_Json_Date_Gson - Fatal编程技术网

Java 在Android上使用GSON将JSON日期格式解析为字符串

Java 在Android上使用GSON将JSON日期格式解析为字符串,java,android,json,date,gson,Java,Android,Json,Date,Gson,我从JSON提要中获得了很多日期 它们看起来是这样的:\/Date(1307972400000+0200)\/ 我需要使用Java将这些日期解析为小时和分钟 编辑: 我已经走了这么远: String s = dateString.replaceAll("^/Date\\(" , ""); 这给了我以下输出:1307972400000+0200)/ 我怎样才能去掉这根绳子的其余部分,有什么建议吗 我希望它是这样的:1307972400000L这是来自.Net服务的JSON提要。我正在使用以下代码

我从JSON提要中获得了很多日期

它们看起来是这样的:
\/Date(1307972400000+0200)\/

我需要使用Java将这些日期解析为小时和分钟

编辑:

我已经走了这么远:

String s = dateString.replaceAll("^/Date\\(" , "");
这给了我以下输出:
1307972400000+0200)/

我怎样才能去掉这根绳子的其余部分,有什么建议吗


我希望它是这样的:
1307972400000L

这是来自.Net服务的JSON提要。我正在使用以下代码:

public class GsonHelper {
    public static Gson createWcfGson() {
        GsonBuilder gsonb = new GsonBuilder();
        gsonb.registerTypeAdapter(Date.class, new WcfDateDeserializer());
        Gson gson = gsonb.create();
        return gson;
    }

    private static class WcfDateDeserializer implements JsonDeserializer<Date>, JsonSerializer<Date> {

        public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
            String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/";
            Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
            Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString());
            String result = matcher.replaceAll("$2");
            return new Date(new Long(result));
    }

        @Override
        public JsonElement serialize(Date date, Type arg1, JsonSerializationContext arg2) {
            return new JsonPrimitive("/Date(" + date.getTime() + ")/");
        }
    }
}
然后,您可以使用返回的
Calendar
对象获取小时和分钟(并根据需要调整时区)

我怎样才能去掉这根绳子的其余部分,有什么建议吗

我希望它像这样:1307972400000升

严格地说,您可以只获取从开始到“+”字符的子字符串

String input = "/Date(1307972400000+0200)/";
String result = input.replaceAll("^/Date\\(" , "");
result = result.substring(0, result.indexOf('+'));
System.out.println(new Long(result));

要增加@Programmer Bruce接受的答案,您只需使用以下命令:

public static Long getTime(String date) {
    if (Utils.isEmpty(date))
        return -1l;
    String t = date.substring(date.indexOf('(') + 1);
    if (date.contains("+"))
        t = t.substring(0, t.indexOf('+'));
    else if (date.contains("-"))
        t = t.substring(0, t.indexOf('-'));
    else
        t = t.substring(0, t.indexOf(')'));
    return new Long(t);
}

他应该调整时区(+0200)我不知道我是不是很愚蠢,但我没有把这个带到Workorry,在你的情况下,它不会起作用。此代码不适用于时区。稍后我将尝试更改它。我从JSON提要获得了所需的一切,我唯一的问题是将日期从JSON格式解析为小时和分钟这里有一个适用于所有区域的正则表达式
\\/(date\((-**?)([\\+\-].*)\\/
String input = "/Date(1307972400000+0200)/";
String result = input.replaceAll("^/Date\\(" , "");
result = result.substring(0, result.indexOf('+'));
System.out.println(new Long(result));
public static Long getTime(String date) {
    if (Utils.isEmpty(date))
        return -1l;
    String t = date.substring(date.indexOf('(') + 1);
    if (date.contains("+"))
        t = t.substring(0, t.indexOf('+'));
    else if (date.contains("-"))
        t = t.substring(0, t.indexOf('-'));
    else
        t = t.substring(0, t.indexOf(')'));
    return new Long(t);
}