如何在模块化java项目中跨类表示日期和时间属性?(mongo用作数据库)

如何在模块化java项目中跨类表示日期和时间属性?(mongo用作数据库),java,mongodb,datetime,calendar,Java,Mongodb,Datetime,Calendar,我们正在寻找在类中表示日期和时间属性的最佳方法,这些属性将持久化到mongoDB中 Mongo在内部使用javascript中的Date(),因此我们可以使用Javanew Date(long millis)构造函数来创建日期实例,并再次使用它以毫秒为单位返回。我们希望使用Date,因为我们以后可以在它上使用$Date mongo操作。用简单的长毫秒是不可能的 然而,我们正在考虑如何在项目中表示时间的最佳方式,因为我们可能会使用夏令时、不同的UTC区域等 我们希望与您核实其是否安全有效的方法是:

我们正在寻找在类中表示日期和时间属性的最佳方法,这些属性将持久化到mongoDB中

Mongo在内部使用javascript中的Date(),因此我们可以使用Java
new Date(long millis)
构造函数来创建日期实例,并再次使用它以毫秒为单位返回。我们希望使用Date,因为我们以后可以在它上使用$Date mongo操作。用简单的长毫秒是不可能的

然而,我们正在考虑如何在项目中表示时间的最佳方式,因为我们可能会使用夏令时、不同的UTC区域等

我们希望与您核实其是否安全有效的方法是:

public class SomeClass{
    private Date someDate;

    public Calendar getDate(){
        return new GregorianCalendar().setTimeInMillis(someDate.getTime());
    }
} 
日历应能安全地用于UTC区域、保存时间以及比较操作等,AFAIK

我们也曾考虑过使用Java8,但我们不确定使用新Java的后果——如果我们没有遇到一些问题的话

  • 那么这种方法好吗
  • 我们是否应该切换到Java8并使用时间,因为这样做是安全的
  • 如果日期只用于存储数据,那么使用它真的安全吗 米利斯和从中取回米利斯?我们不会偶然发现吗 一些问题,如日期/时间上的意外+/-1小时差异 价值
  • 你能想出一个更好的方法来表示我们的时间/日期吗 项目解决这个问题的标准方法是什么

您可以直接存储日期。时间在内部存储为UTC,因此夏令时对您来说应该不是问题。该驱动程序目前不支持Java8(或joda time)日期/时间类型,但有一些链接显示了如何实现。如果您使用的是morphia,您可以看到Java8的LocalDateTime的转换器是什么样子的