gpt4 book ai didi

android - 在改造的 RequestBody 中转换 Date 的 TimeZone

转载 作者:行者123 更新时间:2023-11-29 18:25:50 28 4
gpt4 key购买 nike

我正在使用改造来调用服务器,我有这样的 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);
}
}

但是上面的代码只能控制日期的模式,不能控制时区。我也想更改时区。谢谢!

最佳答案

我的问题得到了解决方案。我使用了 TypeAdapter

class DateConverter extends TypeAdapter<Date> {

private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");

@Override
public void write(JsonWriter out, Date date) throws IOException {
if (date == null) {
out.nullValue();
} else {
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
out.value(simpleDateFormat.format(date));
}
}
}

然后将此适配器设置为 Gson

Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new DateConverter())
.create();

Retrofit.Builder adapterBuilder = new Retrofit
.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonCustomConverterFactory.create(gson))

感谢评论中的帮助

关于android - 在改造的 RequestBody 中转换 Date 的 TimeZone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59106722/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com