【问题标题】:Problem adding minutes with plusMinutes使用 plusMinutes 添加分钟时出现问题
【发布时间】:2018-03-08 06:36:34
【问题描述】:

我正在尝试使用 plusMinutes 为日期添加一些分钟,但它根本没有添加任何内容:

代码如下:

    String currentDate ;
    SimpleDateFormat myFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
    Date date1= null;
    DateTime dt;

    currentDate ="27/12/2010 11:29" ;

    try {
           date1= myFormat.parse(currentDate);

        } catch (ParseException ex) {

        ex.printStackTrace();

    }
    dt = new DateTime(date1);
    dt.plusMinutes(30);

【问题讨论】:

标签: java jodatime


【解决方案1】:

Javadoc

返回此日期时间的副本加上指定的毫秒数。

所以

做类似的事情

dt = new DateTime(date1);
dt = dt.plusMinutes(30);
System.out.println(""+dt);

【讨论】:

  • @ant18 我对这个 Q 的 3 个最爱感到惊讶。:)
  • 这真是乔达的愚蠢实现。如果我在该对象中使用 plusMinutes。它当然应该影响对象本身! :@
【解决方案2】:

joda 的优点在于它们的大多数类都是不可变的,就像 Java 中的 String 一样。更新操作不会更改原始对象。因此plusMinutes(...) 返回一个DateTime 的新副本,其中添加了分钟,您可以将其分配给一个新变量,如下所示。

DateTime newDt=dt.plusMinites(30);
System.out.println(newDt);

【讨论】:

    【解决方案3】:

    我想你想要dt = dt.plusMinutes(30);

    plusMinutes 返回计算的日期时间。它不会修改调用它的日期时间。

    【讨论】:

      【解决方案4】:

      tl;博士

      java.time.LocalDateTime.parse( 
          "27/12/2010 11:29" , 
          DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm" )
      ).plusMinutes( 30 )
      

      2010-12-27T11:59

      提示:如果您打算将其设为时间轴上的特定点,请应用时区 (ZoneId) 的上下文以获取 ZonedDateTime

      java.time

      您的问题使用 Java 最早版本中麻烦的旧日期时间类,您的问题使用现在处于维护模式的 Joda-Time 项目。两者都已被 Java 8 及更高版本中内置的 java.time 类所取代。

      您的字符串输入缺少time zoneoffset-from-UTC 的指示符。所以解析为java.time.LocalDateTime

      DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm" ) ;
      LocalDateTime ldt = LocalDateTime.parse( "27/12/2010 11:29" , f ) ;
      

      ldt.toString(): 2010-12-27T11:29

      请注意,您确实没有有一个实际的时刻,这不是时间轴上的特定点。这只是关于大约 26-27 小时范围内的潜在时刻的模糊概念。要确定实际时刻,请将其放在时区(或偏移)的上下文中:ZonedDateTime zdt = ldt.atZone( ZoneId.of( "Pacific/Auckland" ) ) ;

      添加您的分钟数。

      LocalDateTime later = ldt.plusMinutes( 30 ) ;
      

      latter.toString(): 2010-12-27T11:59


      关于java.time

      java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

      Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

      要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

      您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

      从哪里获得 java.time 类?

      • Java SE 8Java SE 9 及更高版本
        • 内置。
        • 标准 Java API 的一部分,带有捆绑实现。
        • Java 9 添加了一些小功能和修复。
      • Java SE 6Java SE 7
      • Android
        • java.time 类的 Android 捆绑包实现的更高版本。
        • 对于早期的 Android (ThreeTenABP 项目采用 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…

      ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

      【讨论】:

        猜你喜欢
        • 2012-02-08
        • 1970-01-01
        • 2014-05-09
        • 2014-07-12
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多