You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java中Retrofit2提交日期时转字符串异常问题

问题分析与解决

核心原因

提交后created_time显示为java.text.SimpleDateFormat@4f76f1a0,本质是序列化了SimpleDateFormat对象而非格式化后的日期字符串,大概率是以下两种情况之一:

  • MeasureDataClass的created_time字段被定义为SimpleDateFormat类型,而非String。Gson序列化时会调用该对象的默认toString()方法,输出内存标识字符串。
  • 某个环节误将SimpleDateFormat对象(代码中的date变量)传入postData方法,而非格式化后的createdTime字符串。

快速修复步骤

步骤1:检查MeasureDataClass定义

确保created_time字段为String类型,构造函数、getter/setter也对应String类型。示例正确定义:

public class MeasureDataClass {
    private String user_idx;
    private String device_id;
    // ...其他字段
    private String created_time;

    public MeasureDataClass(String user_idx, String device_id, /* ...其他参数 */ String created_time) {
        this.user_idx = user_idx;
        this.device_id = device_id;
        // ...其他字段赋值
        this.created_time = created_time;
    }

    public String getCreated_time() {
        return created_time;
    }

    public void setCreated_time(String created_time) {
        this.created_time = created_time;
    }
}

步骤2:确认参数传递正确性

检查postData调用的最后一个参数,确保传入的是格式化后的createdTime字符串,而非SimpleDateFormat对象。可以简化冗余的toString()调用(createdTime本身已是String):

// 原代码
postData(useridx, deviceid, correlation, tempvalue, intensity, shutterspeed, createdTime.toString());
// 简化后
postData(useridx, deviceid, correlation, tempvalue, intensity, shutterspeed, createdTime);

更规范的优化方案(推荐)

避免手动格式化日期,让Gson自动处理Date类型序列化,减少出错概率:

  1. 修改MeasureDataClass,将created_time改为Date类型并添加格式化注解:
import com.google.gson.annotations.JsonFormat;
import java.util.Date;

public class MeasureDataClass {
    // ...其他字段
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date created_time;

    public MeasureDataClass(/* ...其他参数 */ Date created_time) {
        // ...其他字段赋值
        this.created_time = created_time;
    }

    public Date getCreated_time() {
        return created_time;
    }

    public void setCreated_time(Date created_time) {
        this.created_time = created_time;
    }
}
  1. 简化调用代码,直接传入Date对象:
Date dt = new Date();
// 无需手动格式化,直接传入Date对象
postData(useridx, deviceid, correlation, tempvalue, intensity, shutterspeed, dt);

Gson会自动按照@JsonFormat指定的格式将Date序列化为目标字符串,避免手动转换的潜在错误。

内容的提问来源于stack exchange,提问作者Jaeseo Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:36:13