从 Joda 时间输出中删除毫秒和秒

Remove milliseconds and seconds from Joda time output

我正在尝试输出到某个日期(8 月 15 日在西班牙马德里)的剩余时间,并且使用我的代码我可以获得一个 TextView 来正确显示它。但是,它还显示我想删除的毫秒和秒,以及我想转换为天数的 "months"。

你能帮我一下吗?

    DateTimeZone timeZone = DateTimeZone.forID("Europe/Madrid");
    DateTime target = new DateTime(2015, 8, 15, 0, 0, 0, timeZone);
    DateTime now = new DateTime(timeZone);
    Period period = new Period(now, target);

    PeriodFormatter formatter = PeriodFormat.getDefault();
    String output = formatter.print(period);
    TextView tv = (TextView) v.findViewById(R.id.tv);
    tv.setText(output);

试试这个

    Calendar c = Calendar.getInstance();
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    String formattedDate = df.format(c.getTime());  
    try {

        df.setTimeZone(TimeZone.getDefault());
        long timeStamp  = df.parse(formattedDate).getTime();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

纯 Joda 解决方案如下所示:

   DateTimeZone timeZone = DateTimeZone.forID("Europe/Madrid");
   DateTime target = new DateTime(2015, 8, 15, 0, 0, 0, timeZone);
   DateTime now = new DateTime(timeZone);
   Period period = new Period(now, target);

   PeriodFormatter formatter = PeriodFormat.getDefault();
   String output = formatter.print(period);
   System.out.println(output); // 4 weeks, 2 days, 17 hours, 2 minutes, 10 seconds and 817 milliseconds

   period = new Period(
     now, 
     target, 
     PeriodType.dayTime().withSecondsRemoved().withMillisRemoved());
   output = formatter.print(period);
   System.out.println(output); // 30 days and 17 hours

决定性的变化是使用 PeriodType 的特殊变体。

只要您只需要完整的英文单词(使用 PeriodFormat.getDefault()),Joda-Time 就可以了(内置仅支持 9 种语言 - 其他库具有更好的国际化功能)。否则,标准 Java 根本不提供持续时间处理和格式化,因为 @VV 假装的另一个错误答案。