Java中的简单日期类

Java中的简单日期类,java,date,time,calendar,Java,Date,Time,Calendar,Java中是否有一个date类,我可以用年、月、日、时、分、秒和毫秒来构造它,然后进行比较,给出两个日期值之间的毫秒数,忽略夏时制、闰秒等内容?我可以使用Calendar类进行此操作吗?我曾想过这样做,但它谈到了闰秒和夏令时,我不想影响计算 重要的是,以下不变量始终为真: 对于所有y1、y2、m1、m2、d1、d2、h、m、s、ms: ( f(y1, m1, d1, h, m, s, ms).getTimeInMillis() - f(y2, m2, d2, h, m, s,

Java中是否有一个date类,我可以用年、月、日、时、分、秒和毫秒来构造它,然后进行比较,给出两个日期值之间的毫秒数,忽略夏时制、闰秒等内容?我可以使用Calendar类进行此操作吗?我曾想过这样做,但它谈到了闰秒和夏令时,我不想影响计算

重要的是,以下不变量始终为真:

对于所有y1、y2、m1、m2、d1、d2、h、m、s、ms:

(
    f(y1, m1, d1, h, m, s, ms).getTimeInMillis() - 
    f(y2, m2, d2, h, m, s, ms).getTimeInMillis()
) 
% 
(24 * 60 * 60 * 1000) == 0

我基本上需要知道函数f应该是什么。

您可以使用long。但你还是要担心闰日。你可以做类似的比较

long start = System.currentTimeMillis(); // nanoTime is better for benchmarks
// do something.
long time = System.currentTimeMillis() - start;

但是,如果你必须考虑闰年等,日历可能是最好的选择,因为日期自然混乱;你可以考虑JodiaMe类库,但不是简单得多。

< P>你可以用长。但你还是要担心闰日。你可以做类似的比较

long start = System.currentTimeMillis(); // nanoTime is better for benchmarks
// do something.
long time = System.currentTimeMillis() - start;

但是,如果你必须考虑闰年等,日历可能是最好的选择,因为日期自然混乱;你可以考虑JodiaMe类库,它更漂亮,但不是简单得多。

< P>你可以使用日历类来设置你的年、月和其他东西。 查看
calendar.set()
calendar.getTime(
)方法的javadocs


然后,
date.getTime()
将给出从1970年开始的绝对毫秒数。

您可以使用Calendar类设置年份、月份和其他内容

查看
calendar.set()
calendar.getTime(
)方法的javadocs


然后,
date.getTime()
将给出从1970年开始的绝对毫秒数。

是的,您可以使用Calendar类进行计算。您可以构造日期并使用
getTimeInMillis()
进行比较


我还推荐一个java库,它有很多日期功能。它的性能也更好。

是的,您可以使用Calendar类进行计算。您可以构造日期并使用
getTimeInMillis()
进行比较


我还推荐一个java库,它有很多日期功能。它还具有更好的性能。

您可以使用它进行日期操作。还有完整的。

可用于日期操作。还有完整的。

我会尝试使用Joda DateTime

DateTime d1 = new DateTime(y1,m1,d1,h1,m1,s1,ms1);
DateTime d2 = new DateTime(y2,m2,d2,h2,m2,s2,ms2);
long delta = d1.toMillis() - d2.toMillis();
还应考虑:

 DateTime d1 = new DateTime(y1,m1,d1,h1,m1,s1,ms1);
 DateTime d2 = new DateTime(y2,m2,d2,h2,m2,s2,ms2);
 Duration delta = new Duration( d1, d2);
 int days = delta.toPeriod().getDays();

如果您有不寻常的需求,您可能需要查看Joda年表对象。

我会在您可以使用的地方尝试使用Joda DateTime

DateTime d1 = new DateTime(y1,m1,d1,h1,m1,s1,ms1);
DateTime d2 = new DateTime(y2,m2,d2,h2,m2,s2,ms2);
long delta = d1.toMillis() - d2.toMillis();
还应考虑:

 DateTime d1 = new DateTime(y1,m1,d1,h1,m1,s1,ms1);
 DateTime d2 = new DateTime(y2,m2,d2,h2,m2,s2,ms2);
 Duration delta = new Duration( d1, d2);
 int days = delta.toPeriod().getDays();

如果您有不寻常的需求,您可能希望查看Joda年表对象。

如果您将
日历
与本地时区一起使用,它是否仍然适用闰秒?(对于本地时区,如果JDK中没有有用的值,您可以使用自己的
SimpleTimeZone
实例——我不记得了)。如果对本地时区使用
Calendar
,它是否仍然应用闰秒?(对于本地时区,如果JDK中没有有用的值,您可以使用自己的
SimpleTimeZone
实例——我不记得了)。日历年/月/日/时/分/秒构造函数是否忽略夏时制?日历年/月/日/时/分/秒构造函数是否忽略夏时制?