组织天数纳入年,月,日,小时独立的部分。 Java的(Organise number of da

2019-08-01 00:09发布

在那里组织了一些由工作了两个日期之间的差值来计算的天,到例如使用了364天将是不同部分的一个办法:我想用逻辑运算符0年11个月,30天,小时,分钟等。可能工作如%和/,但不同月份有不同数量的天,有些年是闰年我不知道该怎么做。 任何帮助将非常感激。 我的代码:

import java.util.*;

public class CleanDate {

    public static void main(String[] args) {
        Calendar cDate = GregorianCalendar.getInstance();
        cDate.set(2011, 0, 31, 00, 00, 00);
        Date date1 = cDate.getTime();
        Date date2 = new Date();
        Calendar calendar1 = Calendar.getInstance();
        Calendar calendar2 = Calendar.getInstance();
        calendar1.setTime(date1);
        calendar2.setTime(date2);
        long milliseconds1 = calendar1.getTimeInMillis();
        long milliseconds2 = calendar2.getTimeInMillis();
        long diff = milliseconds2 - milliseconds1;
        long diffSeconds = diff / 1000;
        long diffMinutes = diff / (60 * 1000);
        long diffHours = diff / (60 * 60 * 1000);
        long diffDays = diff / (24 * 60 * 60 * 1000);
        System.out.println("Time in minutes: " + diffMinutes + " minutes.");
        System.out.println("Time in hours: " + diffHours + " hours.");
        System.out.println("Time in days: " + diffDays + " days.");
    }
}

Answer 1:

你可以有效地使用约达时间是这样的: Interval允许获得两个日期之间的时间间隔。

DateTime end = new DateTime(2006, 1, 1, 0, 0, 0, 0);
Interval interval = new Interval(start, end);
Period period = interval.toPeriod();
System.out.println(period.getYears()+" years, "
period.getMonths()+" months, "+period.getWeeks()+" weeks, "+period.getDays()+", days");


Answer 2:

TL;博士

Duration.between(          // Represent a span-of-time unattached to the timeline, on scale of days-hours-minutes-seconds.
    ZonedDateTime          // Represent a moment in the wall-clock time used by the people of a particular region (a time zone). 
    .of( 2011 , 1 , 31 , 0 , 0 , 0 , 0 , ZoneId.of( "Africa/Tunis" ) )
    ,
    ZonedDateTime.of( … ) 
)                          // Returns a `Duration` object.
.toDaysPart()              // Or `toHoursPart`, `toMinutesPart`, `toSecondsPart`, `toNanosPart`. These return either a `long` or an `int`. 

java.time

现代的方法使用java.time类,而不是可怕的旧DateCalendar类。 在看到的乔达时库对方的回答也被java.time取代。

指定日期和时间的日需要一个时间段,以确定确切时刻。 对于任何给定时刻在日期和时间的日由区全球各地有所不同。

指定适当的时区名称 ,格式为continent/region ,如America/MontrealAfrica/Casablanca ,或Pacific/Auckland 。 切勿使用3-4个字母的缩写,如ESTIST ,因为它们不是真正的时区,不规范,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;

如果你想在一天的第一时刻,让java.time确定时间的日在该区域该日期。 每天总是开始于00:00:00。

LocalDate ld = LocalDate.of( 2011 , Month.JANUARY , 31 ) ;
ZonedDateTime start = ld.atStartOfDay( z ) ;  // Let java.time determine the first moment of the day. Never assume 00:00:00.

计算使用经过的天(实际时间24小时块),小时,分钟和秒的Duration类。 多年来,月天(日历天,时间不是24小时块),使用Period类。

ZonedDateTime stop = … ;
Duration d = Duration.between( start , stop ) ;

生成String ,在标准文本对象ISO 8601的格式。

String output = d.toString() ;  // Generate standard ISO 8601 text.

PT2H3M42.725S

提取的各个部分。

long days = d.toDaysPart() ;       // 24-hour chunks of time, *not* calendar days.
int hours = d.toHoursPart() ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
int nanos = d.toNanosPart() ;      // Fractional second as a count of nanoseconds, from 0 to 999,999,999.

年,月,日与日小时 - 分 - 秒

如果你想想看,试图代表年,月,日,小时,分钟,秒来翼展的时间很少是有道理的。 这里涉及诸如日历日与时间24小时的块棘手的问题,而且事实上天长度如23,24,25或其它数量的时间长而变化。

但如果你真的坚持这种方法,添加ThreeTen-EXTRA库项目访问PeriodDuration类。 此类尝试将两个概念结合起来。

在结合了周期和持续时间的ISO-8601日历系统的时间量。

该类机型在一段期限上一个数量或时间量。 一个时段是基于日期的量,包括年,月,日。 的持续时间是时间的基于时间的量,由秒和纳秒。 详情参见期和持续时间的类。

在一个周期的日子考虑夏令变化(23或25小时的日子)。 当执行计算时,时期首先加入,然后持续时间。


关于java.time

java.time框架是建立在Java 8和更高版本。 这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar ,和SimpleDateFormat

乔达-时间的项目,现在在维护模式 ,建议迁移到java.time类。

要了解更多信息,请参阅甲骨文教程 。 和搜索堆栈溢出了很多例子和解释。 规范是JSR 310 。

您可以直接与数据库交换java.time对象。 使用JDBC驱动程序与兼容JDBC 4.2或更高版本。 无需串,没有必要java.sql.*类。

从哪里获取java.time类?

  • 的Java SE 8Java SE的9Java SE的10Java SE的11 ,后来-具有捆绑实现标准Java API的一部分。
    • Java的9增加了一些小的功能和修复。
  • Java SE 6中Java SE 7中
    • 多的java.time功能后移植到Java 6和7在ThreeTen-反向移植
  • Android的
    • 后来版本的java.time类的Android束实现的。
    • 对于较早的Android(<26),则ThreeTenABP项目适应ThreeTen-反向移植 (上面提到的)。 请参阅如何使用ThreeTenABP ...

ThreeTen-额外项目与其他类扩展java.time。 该项目是为将来可能增加的java.time试验场。 您可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter ,和更多 。



文章来源: Organise number of days into separate sections for year, months, days, hours. Java