【问题标题】:How to convert a datetime from sqlserver to java.util.Date如何将日期时间从 sqlserver 转换为 java.util.Date
【发布时间】:2017-11-17 14:31:30
【问题描述】:

我正在使用 android 中的改造库从带有 sql server 数据库(使用 Asp net core 作为 web api)的表中获取一行,据我所知,我必须考虑一个等效于 datetime 的字符串,然后将其转换为 java。 util.Date。检索日期时间的一个示例是2018-10-29T19:56:59。反正有没有直接将 datetime 转换为 java.util.Date ? 代码如下所示。

public class Food {
    @SerializedName("Id")
    private long Id;

    @SerializedName("Name")
    private String Name;

    @SerializedName("Content")
    private String Content;

    @SerializedName("IsActive")
    private boolean IsActive;

    @SerializedName("DoesExist")
    private boolean DoesExist;

    @SerializedName("Cost")
    private int Cost;

    @SerializedName("OffPercentage")
    private int OffPercentage;

    @SerializedName("OffTimeout")
    private Date OffTimeout;
...
}

【问题讨论】:

  • 你能把你的 JSON 响应数据放进去吗?
  • OffTimeout: "2008-10-29T14:56:59"

标签: java android sql-server datetime retrofit


【解决方案1】:

使用自定义解串器尝试JodaTime:

//GSON config
Gson gson = new GsonBuilder()
            .registerTypeAdapter(DateTime.class, new DateTimeDeserializer ())
            .create();


// DateTimeDeserializer.class
    public class DateTimeDeserializer implements JsonDeserializer<DateTime > {

      @Override
      public DateTime deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
          throws JsonParseException {
        return DateTime.parse(json.getAsString());
      }
    }

【讨论】:

  • Joda-Time 可能是个好主意。如果您接受外部依赖,我认为ThreeTenABP 会是一个更好的主意。它在 Android 上提供了 JSR-310,即现代 Java 日期和时间 API AKA java.time,因此非常具有前瞻性。 Joda-Time 是一个已基本完成的项目,现在处于维护模式。
【解决方案2】:

将您的私人日期 OffTimeout 更改为字符串,如下所示:

@SerializedName("OffTimeout")
private String OffTimeout;

并使用此方法解析您的日期。

public static Date fromStringToDate(String stringDate, String pattern){
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        try {
            Date date = format.parse(stringDate);
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

用途:

 Date mydate = fromStringToDate(yourOffTimeOut, "yyyy-MM-dd'T'HH:mm:ss");

【讨论】:

    【解决方案3】:

    另一种可能的解决方案是在发送之前将其转换为服务器上的 Unix 时间戳。时间戳是处理日期/时间的更强大的格式

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2011-04-14
      • 2010-11-03
      相关资源
      最近更新 更多