java - 使用 GSON 将 java.time.LocalDateTime (java 8) 序列化为 js Date 的最佳实践

标签 java javascript serialization gson

在我们最近的项目中,我们使用 java 8。我需要将 java.time.LocalDateTime 序列化为 java 脚本 Date 格式。

目前我所做的是定义一个自定义序列化程序以将 LocalDateTime 转换为时间戳。

public class LocalDateTimeSerializer implements JsonSerializer<LocalDateTime> {
    @Override
    public JsonElement serialize(LocalDateTime localDateTime, Type type, JsonSerializationContext jsonSerializationContext) {
        Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
        Date date = Date.from(instant);
        return new JsonPrimitive(date.getTime());
    }
}

然后使用 GsonBuilder 和我的自定义 LocalDateTimeSerializer 创建 Gson 对象

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer());

Gson gson = gsonBuilder.create();

然后在 Java Script 中,我使用这个时间戳创建一个 Date 对象。它工作正常。

我需要知道,这种方式是否可行,或者是否有更好的方式来做到这一点?

最佳答案

从 LocalDateTime 到 Epoch 毫秒或秒的 Java 8 解决方案:

// to Epoch Seconds
long sec = localDateTime.toInstant(ZoneOffset.UTC).getEpochSecond();

// to Epoch Milliseconds
long msec = localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli();

然而,在您的情况下,我看到一个使用本地时区而不是 UTC 的错误。我推荐的解决方案是:

@Override
public JsonElement serialize(LocalDateTime localDateTime, Type type, JsonSerializationContext jsonSerializationContext) {
    long sec = localDateTime.toInstant(ZoneOffset.UTC).getEpochSecond();
    return new JsonPrimitive(sec);
}

关于java - 使用 GSON 将 java.time.LocalDateTime (java 8) 序列化为 js Date 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21981902/

相关文章:

java - SimpleDateFormat 断言错误

java - 递归:如何尝试整数 1 到 9 的不同组合,以及(部分)反向序列以在出错时重新开始?

javascript - 更好的体验/自动化清洁和构建

c# - 具有长属性名称的 WCF DataContractSerializer 性能

c# - 将 JSON 对象属性反序列化为字符串

java - JDBCPreparedStatement.executeBatch 不更新数据库中的值并且没有错误

java - 将切面转换为原生 AspectJ 表示法

javascript - HTML5 地理定位简单示例不起作用

javascript - casperjs:显示调试信息输出的正确方法

C# 序列化泛型列表<customObject> 到文件