- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我从服务器得到这个字符串:
[
{
"title":"spoil the ones u love today",
"startDateTime":"2014-08-10T20:10:36.7158Z"
},
{
"title":"home made patisserie",
"startDateTime":"2014-08-10T20:08:45.0218Z"
}
]
然后我尝试将它解析为一个对象
public class Offer implements Serializable {
public String title;
public Date startDateTime;
}
Type collectionType = new TypeToken<ArrayList<Offer>>() {}.getType();
mOffersList.addAll((Collection<? extends Offer>) gson.fromJson(result, collectionType));
但是当我将“startDate”定义为日期时
我从 gson 返回的集合是空的
当我将“startDate”定义为字符串时
集合已正确填充。
我想更改它的日期格式。这就是为什么我更喜欢将其保存为 Date 对象。
我试过了
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create;
然而 Gson 无法将服务器的字符串解析为
日期开始日期时间
。 mOffersList
中没有添加任何内容,它保持为空。
我做错了什么?
最佳答案
仅设置所需的 DateFormat 是不够的。
您需要定义 com.google.gson.JsonDeserializer 的实现。例如。
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
return format.parse(date);
} catch (ParseException exp) {
System.err.println("Failed to parse Date:", exp);
return null;
}
}
}
然后注册上面的反序列化器:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
关于java - gson 无法使用 GsonBuilder.setDateFormat ("yyyy-MM-dd' T'HH :mm:ss. SSSZ"进行解析",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25455123/
我有这样的代码: [dateFormat setDateFormat:@"HH:mm"]; dateHM = [dateFormat stringFromDate:date]; 我在 stringWi
我已经将我的 Gson 实例构建为: val DATE_FORMAT_MASK = "yyyy-MM-dd'T'HH:mm:ssZ" val gson = GsonBuilder()
我使用 NSDateFormatter 的什么 setDateFormat 选项来获取月份、日期的序数后缀? 例如下面的代码片段当前生成: 8 月 15 日星期六下午 3:11 我必须改变什么才能得到
-(NSString*) convertToDateString:(NSString*)str{ static NSDateFormatter *InDateFormatter = nil;
我使用 ObjectMapper 将对象映射到 Json 字符串。我在对象中有日期字段来格式化日期,我使用了下面的代码,但它没有按预期格式化。 我的 Json 字符串: {"leaveRequestI
是否可以使用 setDateFormat 获取非零填充的月份数? 如果不能,您能否提供替代解决方案? 最佳答案 在格式字符串中使用M 而不是MM。如果使用两个字母,则指定结果应有两位数,否则,结果可以
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我写了一个扩展 javax.ws.rs.core.Application 的类: @ApplicationPath(value = "/*") public class MyApplication e
NSDateFormatter 对生成诸如“今天”、“明天”、“昨天”等当前语言支持的相关日期有很好的支持。一个很大的优势是所有这些都已经为您本地化了——您不需要翻译字符串。 您可以通过以下方式开启此
我需要将时间的 DateFormat 设置为 12 小时制,我不知道如何设置,此代码显示 24 小时制: NSDateFormatter *timeFormater = [[NSDateForma
我在 json 中以 2011-10-26T20:29:59-07:00 的形式获取日期/时间。这次使用 gsonBuilder.setDateFormat 正确格式化的正确方法是什么? 最佳答案 -
我从服务器得到这个字符串: [ { "title":"spoil the ones u love today", "startDateTime":"2014-08-10T20:10:36.7
我是一名优秀的程序员,十分优秀!