java获取当前秒数。

happyfish
  • 2.4k

求教。不要说毫秒数除以1000.。。

回复
阅读 48.1k
9 个回答

采用JAVA8中的新api(java.time)

    LocalDateTime time = LocalDateTime.now();
    time.getSecond();
Calendar calendar = Calendar.getInstance();
int hours = calendar.get(Calendar.HOUR_OF_DAY); // 时
int minutes = calendar.get(Calendar.MINUTE);    // 分
int seconds = calendar.get(Calendar.SECOND);    // 秒
System.out.println(String.format("hours: %s, minutes: %s, seconds: %s", hours, minutes, seconds));
Calendar calendar = Calendar.getInstance();
calendar.SECOND
Calendar c = Calender.getInstance();
int second = c.get(Calendar.SECOND);

Java 8之前的Date和Time相关的API使用起来非常糟糕。
而对于Java 8之前的版本,由于Joda Time易用易测易扩展,Joda Time几乎是最佳选择。

以题主的问题为例,3种方式:

  • prior to Java 8

    Calendar calendar = Calendar.getInstance();
    System.out.println(calendar.get(Calendar.SECOND));
    
  • Joda Time

    DateTime dateTime = new DateTime();
    System.out.println(dateTime.getSecondOfMinute());
    
  • Java 8

    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println(localDateTime.getSecond());
    

都是2行代码,但后两种语义上更好,第一种给人一种'你写得很好,但我不知道你想表达什么'的印象。
而且第一种有个致命的缺点,它是 可变(mutable) 的,无论是Date还是Calendar,都是可变的。

参考
http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html
http://www.importnew.com/14140.html

System.currentTimeMillis();

得到事件戳之后,在用楼上提到的方法。
据说这种方式是最快的,有人测试过。
博客是

import java.lang.management.ThreadMXBean;
import java.lang.management.ManagementFactory;
public class StopwatchCPU {
    private final ThreadMXBean threadTimer;
    private final long start;
    private static final double NANOSECONDS_PER_SECOND = 1000000000;
    public StopwatchCPU() {  
        threadTimer = ManagementFactory.getThreadMXBean();
        start = threadTimer.getCurrentThreadCpuTime();
    }   
    public double elapsedTime() {
        long now = threadTimer.getCurrentThreadCpuTime();
        return (now - start) / NANOSECONDS_PER_SECOND;
    }   
}

计时用的

hoonick
  • 1
新手上路,请多包涵
long epochSecond = Instant.now().getEpochSecond();
System.out.println("epochSecond = " + epochSecond);

这才是正解吧,但是感觉和毫秒数/1000没差别

宣传栏