【问题标题】:convert string to datetime and compare for the 2 date diff将字符串转换为日期时间并比较 2 日期差异
【发布时间】:2014-05-25 04:14:45
【问题描述】:

问题 1:我有 2 个字段让用户输入开始日期和结束日期,但以字符串格式 - 日期开始(字符串:yyyy/mm/dd hh:mm) - DateEnd (string: yyyy/mm/dd hh:mm)

我可以如何比较两个日期时间吗?我想知道这两个日期之间总共相差多少小时。

问题 2:用户将输入 1 个 returnDate (string: yyyy/mm/dd hh:mm) 也是字符串格式,如果我需要在 returnDate 上添加 55 小时,我可以知道如何更新 returnDate 吗?

谢谢

【问题讨论】:

  • 你试过Java的DateTime函数吗?
  • 对于第一季度;第 1 步,解析,第 2 步比较,第 3 步获利
  • 什么时区?由于夏令时和其他异常情况,小时差异取决于时区。
  • 您问的是 3 个问题而不是一个:(1)如何在 Java 中将字符串解析为日期时间对象,(2)如何计算两个日期时间值之间的小时数(一个间隔),以及(3)如何将小时添加到日期时间。所有这些问题都曾在 StackOverflow 上被多次询问和回答。
  • Java string to date conversionthisthis 的可能重复项。

标签: eclipse


【解决方案1】:

首先查看SimpleDateFormat,它允许您将String 值转换为Date 对象。

例如...

try {
    // Note hh is Hour in am/pm (1-12), based on you example, it's not possible
    // now the day part (ie am or pm), you could supply aa as the am/pm marker
    // or use HH which is Hour in day (0-23)
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm");
    Date date = sdf.parse("2014/04/11 4:46");
    System.out.println(date);
} catch (ParseException exp) {
    exp.printStackTrace();
}

那么你可以使用JodaTime来计算两个日期的差值,例子见How to find difference between two Joda-Time DateTimes in minutes

需要注意的是,你可以一直跳过SimpleDateFormat和JodaTime的使用,查看String to joda LocalDate in format of "dd-MMM-yy"以获取使用JodaTime将String转换为LocalDate的示例

要为现有 Date 添加时间,您可以使用 Calendar 或 JodaTime,请参阅 how to add days to java simple date format 以获取两者的示例

我建议如果您使用某种 GUI,您可以考虑使用可用的日期选择器之一,因为它可以为您节省很多麻烦

【讨论】:

  • 嗨,MadProgrammer,我现在可以从字符串转换为日期时间了.. 你能指导我如何比较 2 日期差异以及如果我需要在 returnDate 上添加 55 小时如何?
  • 是的,检查所有的东西...1计算两个日期之间的时间差,一个添加时间到日期...
  • 应该是“检查所有链接”...:P
  • 并检查我对问题的评论中的链接。
【解决方案2】:

我建议使用Java8的java.util.time

例子:

public static void main(String[] args) {
    // example input
    String dateString1 = "2014/04/10 00:00";
    String dateString2 = "2014/04/11 23:59";

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
    LocalDateTime date1 = LocalDateTime.parse(dateString1, dtf);
    LocalDateTime date2 = LocalDateTime.parse(dateString2, dtf);


    // do your stuff with the dates...
}

【讨论】:

    【解决方案3】:

    这是我的解决方案:

            String date1 = "2014/04/10 15:30";
        String date2 = "2014/04/11 09:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
    
        try {
            Date parsedDate1 = sdf.parse(date1);
            Date parsedDate2 = sdf.parse(date2);
            double secs = (parsedDate2.getTime() - parsedDate1.getTime()) / 1000;
            double hours = secs / 3600;
    
            System.out.println(hours);
    
        } catch (ParseException e) {
            e.printStackTrace();
        }
    

    为日期添加小时数:

    Date date = new Date(someDateObject.getTime() + 55 * 3600 * 1000);
    

    【讨论】:

    • 如果日期本身不同,例如昨天和明天怎么办?您的差异计算将是错误的......
    • 您可以随意更改日期,但如果 date2 在 date1 之前,您将收到一个负值。String date1 = "2014/04/02 15:30";字符串 date2 = "2013/04/02 14:30";将返回 -8761.0
    • 如果您想知道是否已经过了 x 天,但以小时为单位,例如 48 小时,会发生什么...
    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2016-12-02
    • 2021-05-31
    相关资源
    最近更新 更多