Uro*_*s K 110
String time1 = "16:00:00";
String time2 = "19:00:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(time1);
Date date2 = format.parse(time2);
long difference = date2.getTime() - date1.getTime();
Run Code Online (Sandbox Code Playgroud)
差异以毫秒为单位.
我修改了sfaizs帖子.
小智 82
Java 8有一个更清洁的解决方案 - 即时和持续时间
例:
import java.time.Duration;
import java.time.Instant;
...
Instant start = Instant.now();
//your code
Instant end = Instant.now();
Duration timeElapsed = Duration.between(start, end);
System.out.println("Time taken: "+ timeElapsed.toMillis() +" milliseconds");
Run Code Online (Sandbox Code Playgroud)
Fiz*_*han 36
那么,获得相当不同的时间差异
// d1, d2 are dates
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.print(diffDays + " days, ");
System.out.print(diffHours + " hours, ");
System.out.print(diffMinutes + " minutes, ");
System.out.print(diffSeconds + " seconds.");
Run Code Online (Sandbox Code Playgroud)
Ale*_*tet 30
Java 8
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime1= LocalDateTime.parse("2014-11-25 19:00:00", formatter);
LocalDateTime dateTime2= LocalDateTime.parse("2014-11-25 16:00:00", formatter);
long diffInMilli = java.time.Duration.between(dateTime1, dateTime2).toMillis();
long diffInSeconds = java.time.Duration.between(dateTime1, dateTime2).getSeconds();
long diffInMinutes = java.time.Duration.between(dateTime1, dateTime2).toMinutes();
Run Code Online (Sandbox Code Playgroud)
Chr*_*ian 11
就像任何其他语言一样; 将你的时间段转换为unix时间戳(即自Unix纪元以来的秒数),然后简单地减去.然后,生成的秒应该用作新的unix时间戳,并以您想要的任何格式读取格式.
啊,给上面的海报(genesiss)他应有的信誉,代码总是很方便;)虽然,你现在也有一个解释:)
import java.util.Date;
...
Date d1 = new Date();
...
...
Date d2 = new Date();
System.out.println(d2.getTime()-d1.getTime()); //gives the time difference in milliseconds.
System.out.println((d2.getTime()-d1.getTime())/1000); //gives the time difference in seconds.
Run Code Online (Sandbox Code Playgroud)
并且,为了以更好的格式显示,您可以使用:
DecimalFormat myDecimalFormatter = new DecimalFormat("###,###.###");
System.out.println(myDecimalFormatter.format(((double)d2.getTime()-d1.getTime())/1000));
Run Code Online (Sandbox Code Playgroud)
除了使用 period 和 Duration 对象的最常见方法之外,您还可以通过另一种在 Java 中处理时间的方法来拓宽您的知识。
高级 Java 8 库。 ChronoUnit的差异。
ChronoUnit 是确定两个时间值相距多远的好方法。Temporal 包括LocalDate、LocalTime等。
LocalTime one = LocalTime.of(5,15);
LocalTime two = LocalTime.of(6,30);
LocalDate date = LocalDate.of(2019, 1, 29);
System.out.println(ChronoUnit.HOURS.between(one, two)); //1
System.out.println(ChronoUnit.MINUTES.between(one, two)); //75
System.out.println(ChronoUnit.MINUTES.between(one, date)); //DateTimeException
Run Code Online (Sandbox Code Playgroud)
第一个示例显示了截断而不是舍入之间。
第二个显示了计算不同单位是多么容易。
最后一个例子提醒我们不要搞乱 Java 中的日期和时间:)
我发现这个更干净。
Date start = new Date();
//Waiting for 10 seconds
Thread.sleep(10000);
Date end = new Date();
long diff = end.getTime() - start.getTime();
String TimeTaken = String.format("[%s] hours : [%s] mins : [%s] secs",
Long.toString(TimeUnit.MILLISECONDS.toHours(diff)),
TimeUnit.MILLISECONDS.toMinutes(diff),
TimeUnit.MILLISECONDS.toSeconds(diff));
System.out.println(String.format("Time taken %s", TimeTaken));
Run Code Online (Sandbox Code Playgroud)
Time taken [0] hours : [0] mins : [10] secs
Run Code Online (Sandbox Code Playgroud)