【发布时间】:2020-03-25 03:58:10
【问题描述】:
我正在使用改造来调用服务器,我有这样的 requestBody:
class MyRequestBody {
String id;
Date date;
}
我想在 requestBody 中转换日期对象的时区。
我试过这些东西:
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS zzz")
.create();
Retrofit.Builder adapterBuilder = new Retrofit
.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonCustomConverterFactory.create(gson))
class GsonCustomConverterFactory extends Converter.Factory
{
public static GsonCustomConverterFactory create(Gson gson) {
return new GsonCustomConverterFactory(gson);
}
private final Gson gson;
private final GsonConverterFactory gsonConverterFactory;
private GsonCustomConverterFactory(Gson gson) {
if (gson == null) throw new NullPointerException("gson == null");
this.gson = gson;
this.gsonConverterFactory = GsonConverterFactory.create(gson);
}
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
if(type.equals(String.class))
return new GsonResponseBodyConverterToString<Object>(gson, type);
else
return gsonConverterFactory.responseBodyConverter(type, annotations, retrofit);
}
@Override
public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
return gsonConverterFactory.requestBodyConverter(type, parameterAnnotations, methodAnnotations, retrofit);
}
}
但上面的代码只能控制日期而不是时区的模式。 我也想更改时区。 谢谢!
【问题讨论】:
-
为什么使用
Date?我不知道 Gson 如何处理来自 java.time, the modern Java date and time API 的类型,但我知道Date设计不佳且早已过时。所以尽量避免。 -
我暂时无法避免 Date,我想要合适的 Date 转换器和时区
-
你想要哪个时区?因为
Date不能有时区而询问。你的字符串当然可以。 -
在 GMT/UTC 时区
-
TimeZone.setDefault(TimeZone.getTimeZone("GMT+5"));这将改变洞申请时区。
标签: android date datetime timezone gson