【问题标题】:I am getting wrong time between two dates in Joda-Time我在 Joda-Time 的两个日期之间的时间错误
【发布时间】:2019-03-21 04:12:54
【问题描述】:

无论我做什么,我都会得到不正确的结果。谁能给我一些建议:)。

这是我的程序代码,负责获取两个日期之间的时间。

我得到了一个结果,但问题是它不正确,我无法找到问题所在。

我必须在我的项目中使用 Joda 库。

if (timerightnow.isSelected()) {
            DateFormat getdate = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
            Date getdate1 = new Date(); 

            String datenow = getdate1.toString();

            String monthnow = datenow.substring(4, 7);
            String daynow = datenow.substring(8,10);
            String hournow = datenow.substring(11,19);
            String yearnow = datenow.substring(25, 29);

            if (monthnow.equalsIgnoreCase("jan"))
                monthnow = "01";
            if (monthnow.equalsIgnoreCase("feb"))
                monthnow = "02";
            if (monthnow.equalsIgnoreCase("mar"))
                monthnow = "03";
            if (monthnow.equalsIgnoreCase("apr"))
                monthnow = "04";
            if (monthnow.equalsIgnoreCase("may"))
                monthnow = "05";
            if (monthnow.equalsIgnoreCase("jun"))
                monthnow = "06";
            if (monthnow.equalsIgnoreCase("jul"))
                monthnow = "07";
            if (monthnow.equalsIgnoreCase("agu"))
                monthnow = "08";
            if (monthnow.equalsIgnoreCase("sep"))
                monthnow = "09";
            if (monthnow.equalsIgnoreCase("oct"))
                monthnow = "10";
            if (monthnow.equalsIgnoreCase("nov"))
                monthnow = "11";
            if (monthnow.equalsIgnoreCase("dec"))
                monthnow = "12";

            String timenow = monthnow + "/" + daynow + "/" + yearnow + " " + hournow;
            String timetotext = timeto.getText();
            SimpleDateFormat date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");


            Date datestart = null;
            Date dateend = null;



             try {

                 datestart = date.parse(timenow);
                 dateend = date.parse(timetotext);

                 DateTime datestartdaytime = new DateTime(datestart);
                 DateTime dateenddaytime = new DateTime(dateend);

                 JOptionPane.showMessageDialog(null, datestartdaytime + "\n" + dateenddaytime);

                int monthoutput = Months.monthsBetween(datestartdaytime, dateenddaytime).getMonths();
                int daysoutput = Days.daysBetween(datestartdaytime, datestartdaytime).getDays() % 30;
                int hoursoutput = Hours.hoursBetween(datestartdaytime, datestartdaytime).getHours() % 24;
                int minutsoutput = Minutes.minutesBetween(datestartdaytime, dateenddaytime).getMinutes() % 60;
                int secondsoutput = Seconds.secondsBetween(datestartdaytime, dateenddaytime).getSeconds() % 60;

                answer.setText(monthoutput + "Months" + daysoutput + "Days" + hoursoutput + "Hours" + minutsoutput + "Minutes" + secondsoutput + "Seconds");

非常感谢:)

【问题讨论】:

  • 如果您愿意,请准确指定您想要的结果。举个例子。以及您得到的结果有何不同。 timeto 是什么。那么我相信有人可以并且会回答你的问题。谢谢你。 PS 我会立即推荐 java.time, the modern Java date and time API 而不是 Joda-Time。 Joda-Time 至少在几年前就处于维护模式。
  • 您现在将时间从Date 转换为String,然后将其解析回Date。这有什么意义吗?即使您想这样做,也可以以更简单的方式完成。另外,当你使用 Joda-Time 时,不要将过时的类 DateSimpleDateFormat 混在一起,这只是过于复杂的事情。 Joda-Time 可以为您提供所需的功能以及更多功能。
  • 另外你已经发布了很多行代码。对于您即将提出的问题(在 Stack Overflow 和其他地方),您应该学习 How to create a Minimal, Complete, and Verifiable example。有了这个和一个精确的问题描述,我希望有人能更快地找到并指出你的问题。您甚至可能在发布问题之前就已经发现了自己。此外,学习使用调试器对您来说可能是一项不错的投资。

标签: java datetime jodatime duration period


【解决方案1】:

你的错误在这两行:

            int daysoutput = Days.daysBetween(datestartdaytime, datestartdaytime).getDays() % 30;
            int hoursoutput = Hours.hoursBetween(datestartdaytime, datestartdaytime).getHours() % 24;

您打算使用dateenddaytime 作为第二个参数:

            int daysoutput = Days.daysBetween(datestartdaytime, dateenddaytime).getDays() % 30;
            int hoursoutput = Hours.hoursBetween(datestartdaytime, dateenddaytime).getHours() % 24;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 2016-04-18
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2013-02-14
    相关资源
    最近更新 更多