Java 如何获取当前日期时间–;日期()和日历()

Java 如何获取当前日期时间–;日期()和日历(),java,date,datetime,time,date-arithmetic,Java,Date,Datetime,Time,Date Arithmetic,我希望小时和分钟从当前日期开始到2016年10月10日结束 package com.mkyong.date; import java.text.SimpleDateFormat; import java.util.Date; public class DateDifferentExample { public static void main(String[] args) { DateFormat dateFormat = new SimpleDateForm

我希望小时和分钟从当前日期开始到2016年10月10日结束

package com.mkyong.date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample
{
    public static void main(String[] args)
    {
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        //get current date time with Date()
        Date date = new Date();
        System.out.println(dateFormat.format(date));
        //get current date time with Calendar()
        Calendar cal = Calendar.getInstance();
        System.out.println(dateFormat.format(cal.getTime()));
        String dateStart = "01/14/2012 09:29:58";
        String dateStop = "01/15/2012 10:31:48";
        //HH converts hour in 24 hours format (0-23), day calculation
        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        Date d1 = null;
        Date d2 = null;
        try
        {
            d1 = format.parse(dateStart);
            d2 = format.parse(dateStop);
            //in milliseconds
            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.");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
结果:

2016/08/15 18:54:03
2016/08/15 18:54:03
1097 Days1 Hours 1 Minute 50 Second 
My want to result for example :
100 days 5 hours 2 minutes 

公共最终作废集(整数年、整数月、整数日期)-此日历类方法可用于设置日期


公共最终作废集(整数年、整数月、整数日、整数小时日、整数分钟、整数秒)也可用于设置时间

Calendar.getInstance()默认设置当前日期和时间。`

避免使用旧的日期时间类 您正在使用与最早版本的Java捆绑在一起的旧遗留日期时间类。改用java.time类

解析 您的输入字符串几乎采用标准ISO 8601格式。用<代码> T < /代码>替换中间的空间。默认情况下,java.time类使用ISO 8601格式解析/生成字符串。因此,无需指定格式化模式

String startInput = "01/14/2012 09:29:58".replace( " " , "T" );
String stopInput = "01/15/2012 10:31:48".replace( " " , "T" );
LocalDateTime
您的输入缺少有关UTC或时区偏移量的任何信息。因此,我们将解析为
LocalDateTime
对象

LocalDateTime startLdt = LocalDateTime.parse( startInput );
LocalDateTime stopLdt = LocalDateTime.parse( stopInput );
如果您进一步使用这些类型,您将获得基于常规24小时工作日的结果,同时忽略诸如夏令时(DST)等异常情况

如果您知道此数据的上下文是特定时区,请应用该时区以获取
ZonedDateTime

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime start = startLdt.atZone( zoneId );
ZonedDateTime stop = stopLdt.atZone( zoneId );
如果希望当前时刻作为开始或停止,请立即调用
now
。传递所需/预期的时区,而不是依赖JVM的当前默认时区

ZonedDateTime now = ZonedDateTime.now( zoneId );
期间 该类将时间跨度表示为总秒数加上几分之一秒的纳秒分辨率

Duration duration = Duration.between( start , stop );
奇怪的是,在Java8中,这个类缺少获取构成这个时间跨度的天数、小时数等的方法。爪哇9

在Java9之前,您可以自己进行计算

关于java.time 该框架内置于Java8及更高版本中。这些类取代了旧的麻烦的日期时间类,如
java.util.date
.Calendar
,&
java.text.SimpleDateFormat

该项目现已启动,建议迁移到java.time

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释

大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如
Interval
YearWeek
YearQuarter
,等等

long days = duration.toDaysPart();
int hours = duration.toHoursPart();
int minutes = duration.toMinutesPart();