【问题标题】:Getting the exact years or days or months between two joda date [duplicate]获取两个约达日期之间的确切年份或日期或月份[重复]
【发布时间】:2017-05-05 01:25:49
【问题描述】:

我需要得到两个 joda 日期时间之间的天数、月数和年数的确切差异。我正在使用下面的代码:

DateTime jodaStartTime=new DateTime(startTime);
DateTime jodaEndTime=new DateTime(endTime);

Period period = new Period(jodaStartTime, jodaEndTime);

System.out.print(period.getYears() + " years, ");
System.out.print(period.getMonths() + " months, ");

但是,例如,我需要得到确切的年份而不是 2 年,我应该得到 2010,2011 或者不是 18 个月(涵盖所有月份),我需要得到 1 到 12 之间的范围。

首先,我想更改这段代码,以便我可以使用 Java 8 时间,那么如何使用 Java 8 时间呢?

【问题讨论】:

  • 以年为单位的范围要求对我来说是有意义的,但以月或日为单位的范围要求却不是。如果两个日期相隔 18 个月,您可能会报告 1 年,但是您会报告 哪些 个月?
  • 顺便说一下,JodaTime 现在处于维护模式,假设您使用的是 Java 8,您可能希望使用 Java 8 的日期 API。
  • 事实证明,“午夜/一天的开始”有时意味着凌晨 1 点(在某些地方会以这种方式进行夏令时),而 Days.days Between 无法正确处理。
  • 嗨,我编辑了我的问题,使用 java 8 和 java.time 模块完成上述操作。

标签: java jodatime


【解决方案1】:

您可以保留一个列表并根据您的差异进行填写。我已经实现了一种方法来给出一个想法:

private static LinkedList yearLister(int yearCount, int startingYear, int endYear){
    LinkedList years = new LinkedList();
    if (yearCount < 0){ yearCount = -yearCount; } 
    // yearCount can be negative. 
    // When that is the case, you won't be able to add elements to your   
    // list. This statement deals with that.

    if(startingYear > endYear){         
        for(int i = 0; i < yearCount; i++){
            years.add(endYear + i + 1 );
        }
    } else if (startingYear < endYear) {            
        for(int i = 0; i < yearCount - 1; i++){
            years.add(startingYear + i + 1);
            }
        }

    System.out.println(years);
    return years;
    }

主要是为 2022 年和 2017 年创建简单的日期,例如:

Date d1,d2 = null; // need these for formatting
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm");

String dateStart = "01/01/2022 05:30";
String dateStop = "02/2/2017 06:31";            
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);

DateTime jodaStartTime=new DateTime(d1);
DateTime jodaEndTime=new DateTime(d2);

int startingYear = jodaStartTime.getYear();
int endYear = jodaEndTime.getYear();

当您将以下行添加到主目录时:

yearLister(yearCount, startingYear, endYear);

输出为:[2018, 2019, 2020, 2021]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2019-06-30
    相关资源
    最近更新 更多