当前位置: 首页 > 知识库问答 >
问题:

如何比较ISO8601格式的日期?

邢令
2023-03-14

有没有办法将ISO8601日期与Java进行比较?比如,知道字符串日期是否是良好的格式,知道月份是否为负数,以及

我还在搜索如何知道互联网上是否有课程可以比较两个ISO8601日期?比如,如果我有:2000-12-12和1999-05-06。我如何比较这两个日期,使之在年、月和日之间有准确的差异?

共有3个答案

罗安和
2023-03-14

一些关于如何在Java中解析和比较日期的示例(8)。您可以使用java。时间LocalDate课程。下面是一些例子:

try {
    LocalDate.of(2000, 13, 12);
} catch (DateTimeException e) {
    System.out.println("It seems the date 12/13/2000 is invalid?");
}

// If you have only a string...

LocalDate.parse("2000-03-10");
System.out.println("I managed to parse the date from a string");

try {
    LocalDate.of(2000, 2, 30);
} catch (DateTimeException e) {
    System.out.println("It seems the date 30/02/2000 is invalid?");
}

var date1 = LocalDate.of(2000, 12, 12);
var date2 = LocalDate.of(1999, 5, 6);

if (date1.isBefore(date2)) {
    System.out.println("Date 1 is before date 2");
} else if (date1.isEqual(date2)) {
    System.out.println("Date 1 is equal to date 2");
} else {
    System.out.println("Date 1 is after date 2");
}

var period = Period.between(date2, date1);

System.out.println("Difference between date 1 and date 2 is: ");
System.out.print(period.getYears() + " years, ");
System.out.print(period.getMonths() + " months, ");
System.out.print(period.getDays() + " days");

这将打印:

It seems the date 12/13/2000 is invalid?
I managed to parse the date from a string
It seems the date 30/02/2000 is invalid?
Date 1 is after date 2
Difference between date 1 and date 2 is: 
1 years, 7 months, 6 days

如果还需要处理时间,可以使用LocalDateTime类。如果你尝试手动操作,这两个类都会为你节省大量时间!

您还可以使用ChronoUnit类计算以天为单位的距离,只需执行以下操作:

ChronoUnit.DAYS.between(date1, date2);
ChronoUnit.MONTHS.between(date1, date2);
ChronoUnit.YEARS.between(date1, date2);

请在此处查看ChronoUnit方法:https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html

贲永思
2023-03-14

如果您使用的是Java 8或更高版本,请使用Java中的工具。时间套餐:

LocalDate date1 = LocalDate.parse("1999-05-06"), 
    date2 = LocalDate.parse("2000-12-12");
Period period = Period.between(date1, date2);
// Prints "1 years, 7 months and 6 days"
System.out.printf("%d years, %d months and %d days\n", period.getYears(),
            period.getMonths(), period.getDays());

您需要的所有信息都可以从LocalDate类中的方法中提取。如果字符串的格式无效,LocalDate::parse方法将抛出一个异常,指示出了什么问题。

万嘉石
2023-03-14

有没有办法将ISO8601日期与Java进行比较?比如,知道字符串日期是否是良好的格式,知道月份是否为负数,以及

获取一个LocalDate实例,将年、月和月中的哪一天作为参数传递到LocalDate.of中的一个try-get块中。如果其中任何一个无效,DateTimeExctive将被抛出表示相同。

import java.time.DateTimeException;
import java.time.LocalDate;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int year, month, dayOfMonth;
        LocalDate date;
        System.out.print("Enter the year, month and day separated by space: ");
        year = scanner.nextInt();
        month = scanner.nextInt();
        dayOfMonth = scanner.nextInt();

        try {
            date = LocalDate.of(year, month, dayOfMonth);
            System.out.println("The date in ISO 8601 format is " + date);
        } catch (DateTimeException e) {
            System.out.println(e.getMessage());
        }
    }
}

示例运行:

Enter the year, month and day separated by space: 2020 2 30
Invalid date 'FEBRUARY 30'

另一个示例运行:

Enter the year, month and day separated by space: 2020 2 29
The date in ISO 8601 format is 2020-02-29

我还在搜索如何知道互联网上是否有课程可以比较两个ISO8601日期?比如,如果我有:2000-12-12和1999-05-06。我如何比较这两个日期,使之在年、月和日之间有准确的差异?

使用LocalDate#till获取java。时间期间从中可以获得年、月和日。

import java.time.LocalDate;
import java.time.Period;

public class Main {
    public static void main(String[] args) {
        String dateStr1 = "1999-05-06";
        String dateStr2 = "2000-12-12";

        LocalDate date1 = LocalDate.parse(dateStr1);
        LocalDate date2 = LocalDate.parse(dateStr2);

        Period period = date1.until(date2);
        System.out.printf("There are %d years, %d months and %d days between %s and %s", period.getYears(),
                period.getMonths(), period.getDays(), dateStr1, dateStr2);
    }
}

输出:

There are 1 years, 7 months and 6 days between 1999-05-06 and 2000-12-12
 类似资料:
  • 问题内容: 我正在使用bootstrap-datetimepicker和ISO8601 datetime格式,如其选项部分所述 在我的控制器中 它以(console.log)将数据发送到后端 并保存为数据库 在我的模板中 我在HTML上看到的输出为 但是根据Angular doc,它应该用于格式 我想念的是什么? 问题答案: 现在,我已经创建了一个过滤器 作为依赖项添加为 并用作 并将日期显示为

  • 我想问的是,是否有一种首选的方法来根据显示格式比较两个日期对象?我可以实现这个逻辑,我只是好奇是否已经存在一些实现。 更新 我有两个日期对象: null

  • 我有两个字符串格式的日期:说,格式为。比较日期1和日期2的相等性的最佳方法是什么?我不关心时间,只关心日、年、月。我应该将它们转换为即时并进行比较吗?

  • 问题内容: 如何转换此 格式 ( ISO8601格式 ): 2014-03-13T09:05:50.240Z 为此( MySQL DATE格式 ): 2014-03-13 在PHP中? 问题答案: 尝试这个 完整的日期功能文档可以在这里找到:http : //php.net/manual/en/function.date.php PHP函数“ strtotime”不执行任何其他操作,然后将您的时间

  • 我有以下几点: 上面的代码不起作用。以上问题还有其他解决方案吗? 格式化日期按我在哪里可以找到留档格式化日期在JavaScript?也dint为我工作。

  • 我想在Mongo和Spring中获取结果bw两个日期,但它显示解析异常。 如果我将like date作为字符串传递,则不会有结果。如何比较spring和Mongo应用程序中的日期。 我的收藏: