计算前一天午夜的Unix时间戳

6

如何在Java中计算截断到午夜的Unix时间戳?

PHP示例显示了制作字符串,然后将其解析回来的方法。肯定有比这更简洁的方法来完成它。


1
在哪个时区午夜?并且你能使用Joda Time吗? - Jon Skeet
@JonSkeet UTC,是的,我可以使用Joda Time,尽管我还没有在其他地方使用它。 - Will
1
如果你需要处理大量的日期/时间工作,我强烈建议使用Joda Time :) - Jon Skeet
请注意,对于Java 8,您有一个新的日期+时间API,使得这个过程更加容易。 - Thorbjørn Ravn Andersen
3个回答

5

Unix时间戳从UTC零点开始计算,因此我们可以执行以下操作

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long unixTimeStamp = c.getTimeInMillis() / 1000;

5

对于Unix时间戳,您可以创建如下函数:

public long getMidnightTimestamp(long timestamp)
{
    return timestamp - timestamp % 86400; // 24 * 60 * 60 sec in one day 
}

并像这样使用它:

long currentTimestamp =  System.currentTimeMillis() / 1000;
long todayMidnightTimestamp = getMidnightTimestamp(currentTimestamp);

闰秒?我认为这会稍微不太准确。自1970年以来已经有27个闰秒了。(好吧,算了。Unix时间不考虑闰秒。这使得Unix时间略微不准确,但你的技巧将百分之百奏效) - Karl
聪明!一个整洁的解决方案,无需依赖于Calendar/Date/SimpleDateFormat。 - Raste

4
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
c.set(Calendar.HOUR,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
c.set(Calendar.MILLISECOND,0);

long midnightUnixTimestamp = c.getTime().getTime()/1000;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接