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

使用倒计时计算两次之间的月数

严高峻
2023-03-14

我在计算两次约会的时差。。

Calendar currentDate = Calendar.getInstance();
        long currentDateInMillis = currentDate.getTimeInMillis();

        //Set Event Date and time
        Calendar nextDate = Calendar.getInstance();
                        // set the month, date, year, hour, minute, second, and millisecond
        nextDate.set(Calendar.YEAR, 2013);
        nextDate.set(Calendar.MONTH, 10); // January is 0, Feb is 1, etc.
        nextDate.set(Calendar.DATE, 27);
        nextDate.set(Calendar.HOUR_OF_DAY, 23);
        nextDate.set(Calendar.MINUTE, 0);
        nextDate.set(Calendar.SECOND, 0);
        nextDate.set(Calendar.MILLISECOND, 0);

        long nextDateInMillis = nextDate.getTimeInMillis();

        timeDiff = nextDateInMillis - currentDateInMillis;



    timer = new CountDownTimer(timeDiff, 1000) 
            {
                public void onTick(long millisUntilFinished) 
                {
                    int totalSeconds = (int) (millisUntilFinished / 1000);

                    int daysText     = (int) (totalSeconds / 86400);
                    int hoursText    = (int) ((totalSeconds % 86400) / 3600);
                    int minutesText  = (int) (((totalSeconds % 86400) % 3600) / 60);
                    //int secondsText = (int) (((totalSeconds % 86400) % 3600) % 60);

                    minutes.setText(String.valueOf(minutesText));
                    hours.setText(String.valueOf(hoursText));
                    days.setText(String.valueOf(daysText));
                }

                public void onFinish() 
                {

                }
            };
            timer.start();

上面的方法很有效,但它可以提供几天、几小时和几秒钟的时间。我希望它也能告诉我月份。但问题是每个月都有不同的天数,所以我如何才能找到月数呢?

共有2个答案

景俊良
2023-03-14

我得说,洛图新索的回答几乎满足了你的需求。所以,我只想补充一点信息。。。你只需要得到当前时间(或者从你有了它之后就把它传进来),取倒数计时的毫秒数,把它们加在一起作为目标时间,然后使用interval找到当前时间和目标时间之间的时间间隔。

把JodaTime当成LotusUNSW是。。。

public void onTick(long millisUntilFinished)
{
    long currentTime = DateTimeUtils.currentTimeMillis();
    Period period = new Interval(currentTime, currentTime + 
        millisUntilFinished).toPeriod(PeriodType.yearMonthDayTime());
    System.out.printf("%d years, %d months, %d days, %d hours, %d minutes, %d seconds%n", 
        period.getYears(), period.getMonths(), period.getDays(),
        period.getHours(), period.getMinutes(), period.getSeconds());   
}

对于您在那里的日期,输出如下:0年,0个月,10天,14小时,6分钟,29秒

你可以在这里找到不同的PeriodType选项。如果您希望只包含一种类型的单元的总数,那么有一些周期类型,例如PeriodType。months()如果您想要以月为单位的总时间。

隆芷阳
2023-03-14

你为什么不利用乔达的时间呢?

例如:

public class DateTimeUtils {

    public static void main(String[] args) {

      DateTimeUtils obj = new DateTimeUtils();
      SimpleDateFormat simpleDateFormat = 
               new SimpleDateFormat("dd/M/yyyy hh:mm:ss");

      try {

        Date date1 = simpleDateFormat.parse("10/10/2013 11:30:10");
        Date date2 = simpleDateFormat.parse("13/11/2014 20:35:55");

        obj.printDifference(date1, date2);  

      } catch (ParseException e) {
        e.printStackTrace();
      }

    }

    public void printDifference(Date startDate, Date endDate){

      Interval interval = 
               new Interval(startDate.getTime(), endDate.getTime());
      Period period = interval.toPeriod();

          System.out.printf(
           "%d years, %d months, %d days, %d hours, %d minutes, %d seconds%n", 
           period.getYears(), period.getMonths(), period.getDays(),
           period.getHours(), period.getMinutes(), period.getSeconds());

    }
}

只需输入两次,输出如下:

a years, b months, c days, d hours etc...
 类似资料:
  • 我试图计算两个时间之间有多少毫秒(例如,从13:00到13:01,有60000毫秒)。时间由2个整数(小时、分钟)表示。 我写了这个函数: 然而,当第二次是第二天时,这将不起作用(例如,从周日14:00到周一13:00之间有多少毫秒?)

  • 问题内容: 我试图找到最干净/最pythonic的方式来评估“ now”是否介于两次之间;然而; 例如,“开始/结束时间”可能会跨越一天的边界,也可能不会跨越一天的边界(仅使用简单的示例): 做一个简单的方案是行不通的! 我目前拥有的一些代码可以评估当前是否为“ NightTime”,如下所示: 我注意到,这些似乎并不能说明开始时间和结束时间跨越一天的边界。 除此之外; 关于添加基于日程安排的任何

  • 问题内容: 我有一个带有StartDate列的表,我想计算两个连续记录之间的时间差。 谢谢。 @ Mark Byers和@ Yahia,我将请求表作为requestId,startdate 我想知道requestid 1和2、2和3、3和4等之间的时差是多少。我知道我需要在表上进行自我连接,但是我在子句上没有得到正确的支持。 问题答案: 要实现您的要求,请尝试以下操作(从OP编辑后进行更新): 如

  • 我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我正在使用NodaTime来实现这一点,但在接下来的几个月里,我遇到了一些问题。 我已经阅读了这里的大部分问题和答案,但没有找到任何我可以从中受益的东西。 大多数时候函数工作但有时它不添加月如果天 我使用这个代码进行测试 (2017, 10, 16)和(2018, 1, 15)应该显示为3个月,但它们显示为2个

  • 问题内容: 如果不使用PHP 5.3的date_diff函数(我使用的是PHP 5.2.17),是否有一种简单而准确的方法?我正在考虑以下代码,但是我不知道如何计算leap年: 我正在尝试计算一个人的月数。 问题答案: 您可能还希望将某天包括在内,具体取决于您是否指的是 整个 月。希望你能明白。

  • 问题内容: 我一直在寻找Android API,并且一直在寻找一种方法来计算当前日期和未来日期之间的天数。我对android很陌生,几年来我还没有做过Java。什么是最简单的计算方法? 谢谢 问题答案: 最简单的方法是为此使用Joda Time Days类: