在Java编程中,获取当前时间戳是一个常见需求,时间戳可以保存为long类型的整数,是指从1970年1月1日0时0分0秒(UTC,即格林威治标准时间)开始到当前时间的秒数。以下是几种获取Java当前时间戳的方法:
一、使用System.currentTimeMillis()
long timestamp = System.currentTimeMillis();
System.currentTimeMillis()返回从UTC 1970年1月1日0时0分0秒到当前时间的毫秒数,我们可以直接除以1000转换成秒数,也可以将返回值直接保存到long类型的变量中。
使用System.currentTimeMillis()方法获取时间戳的优点是方法执行速度快,缺点是返回值只能精确到毫秒级,如果需要更精确的时间戳,可以使用System.nanoTime()方法。
二、使用Instant.now().getEpochSecond()
long timestamp = Instant.now().getEpochSecond();
Instant类是Java 8新增的API,可以用来表示时间线上的一个瞬间。可以获取当前的Instant实例,然后调用getEpochSecond()方法得到从UTC 1970年1月1日0时0分0秒到当前时间的秒数。
使用Instant类获取时间戳的优点是可以精确到纳秒级别,缺点是代码编写比较麻烦,而且需要使用Java 8以上的版本。
三、使用new Date().getTime()
long timestamp = new Date().getTime();
在早期版本的Java中,我们可以使用Date类来获取当前时间戳,调用getTime()方法可以获得从UTC 1970年1月1日0时0分0秒到当前时间的毫秒数。
使用Date类获取时间戳的缺点是它已经过时,不建议使用,多线程环境下可能存在线程安全问题。
四、使用Calendar.getInstance().getTime().getTime()
long timestamp = Calendar.getInstance().getTime().getTime();
我们也可以使用Calendar类来获取当前时间戳,首先需要获取一个实例,然后调用getTime()方法得到一个Date对象,再调用Date对象的getTime()方法即可获得时间戳。
Calendar类获取时间戳和Date类类似,同样已经过时,也不建议使用。
五、通过java.sql.Timestamp获取当前时间戳
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
long ts = timestamp.getTime();
Timestamp类也可以用来表示时间戳,它可以精确到纳秒级别。我们可以创建一个Timestamp实例,传入System.currentTimeMillis()方法的返回值作为参数,然后调用getTime()方法即可得到时间戳。
使用Timestamp类获取时间戳的缺点是代码比较冗长,需要创建对象。
六、使用Joda-Time类库获取当前时间戳
long timestamp = DateTime.now().getMillis() / 1000;
Joda-Time类库是常用的Java时间和日期操作类库,它提供了多种方式来获取当前时间戳。
我们可以使用DateTime类来表示当前时间,调用getMillis()方法可以获得从UTC 1970年1月1日0时0分0秒到当前时间的毫秒数,然后除以1000即可得到时间戳。
使用Joda-Time类库获取时间戳可以简洁明了,而且可以精确到毫秒级别。