使用jodatime查找剩余的日期和时间

时间:2011-11-06 09:23:56

标签: java android jodatime

我想使用joda时间来比较(找出两天之间的剩余天数和时间)。 我正在接受两个这样的DateTime对象(一个正在启动而另一个正在结束)

DateTime endDate  = new DateTime(2011,12,25,0,0,0,0);   
DateTime strtDate = new DateTime();

现在我有兴趣找到这样的剩余日期和时间 days:49 Hrs:5 Min:52 Sec:45(此处不考虑年份和月份。)

现在我继续这样的期间课程

Period period = new Period();

PeriodFormatter formatter = new PeriodFormatterBuilder()
    .appendSeconds()
    .appendMinutes()
    .appendHours()
    .appendDays()
    .appendMonths()
    .appendYears()
    .printZeroNever()
    .toFormatter();

现在结果是我得到年,月,日等... 在这种情况下,我将在1-30(不是31,45,49 ......(我想要的))之间得到天。

那么我怎么能得到这个东西(有没有我缺少的方法)或者我需要以编程方式处理这个,因为我读到joda时间非常灵活所以我很确定会有这样的方法

如果您熟悉,请善意分享您的知识。

2 个答案:

答案 0 :(得分:14)

使用 PeriodType.dayTime() 定义天数以下的所有标准字段。

例如

DateTime startDate = DateTime.now(); // now() : since Joda Time 2.0
DateTime endDate = new DateTime(2011, 12, 25, 0, 0);

Period period = new Period(startDate, endDate, PeriodType.dayTime());

PeriodFormatter formatter = new PeriodFormatterBuilder()
        .appendDays().appendSuffix(" day ", " days ")
        .appendHours().appendSuffix(" hour ", " hours ")
        .appendMinutes().appendSuffix(" minute ", " minutes ")
        .appendSeconds().appendSuffix(" second ", " seconds ")
        .toFormatter();

System.out.println(formatter.print(period));

示例输出

startDateendDate之间的时间段是

  

47天12小时46分47秒


PeriodFormatter formatter = new PeriodFormatterBuilder()
        .appendPrefix("Day:", " Days:").appendDays()
        .appendPrefix(" Hour:", " Hours:").appendHours()
        .appendPrefix(" Minute:", " Minutes:").appendMinutes()
        .appendPrefix(" Second:", " Seconds:").appendSeconds()
        .toFormatter();

输出

  

天:47小时:12分钟:46秒:47

答案 1 :(得分:0)

如果要以更漂亮的格式输出,则也可以使用此代码段

    // Grab the integer values, for layers associated with these three enemies.
    int enemy1, enemy2, enemy3;

    private void Awake ( )
    {
        enemy1 = LayerMask.NameToLayer ( "EnemyLayer1" );
        enemy2 = LayerMask.NameToLayer ( "EnemyLayer2" );
        enemy3 = LayerMask.NameToLayer ( "EnemyLayer3" );
    }

    private void OnTriggerEnter2D ( Collider2D collision )
    {
        var layerMask = collision.gameObject.layer;
        if ( layerMask == enemy1 )
        {
            // ...
        }
        else if ( layerMask == enemy2 )
        {
            // ...
        }
        else if ( layerMask == enemy3 )
        {
            // ...
        }
    }