我正在尝试使用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);
答案 0 :(得分:16)
返回此日期时间的副本加上指定的millis数。
所以
做类似
的事情dt = new DateTime(date1);
dt = dt.plusMinutes(30);
System.out.println(""+dt);
答案 1 :(得分:2)
joda之美是他们的大多数类都是像Java中的String一样不可变的。更新操作不会更改原始对象。因此,plusMinutes(...)会返回 DateTime的新副本,并添加分钟,您可以将其分配给新变量,如下所示。
DateTime newDt=dt.plusMinites(30);
System.out.println(newDt);
答案 2 :(得分:2)
我想你想要dt = dt.plusMinutes(30);
plusMinutes
返回计算的dateTime。它不会修改调用它的dateTime。
答案 3 :(得分:1)
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中棘手的旧日期时间类,而您的问题使用了现在处于维护模式的Joda-Time项目。两者都被Java 8及更高版本中内置的 java.time 类所取代。
您的字符串输入缺少time zone或offset-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 ) ;
later.toString():2010-12-27T11:59
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。