在我的 Grails 项目中,控制器中有一个日期,我需要将该日期增加 一个月,所以我做了如下操作:
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD HH:MM:ss");
def temp
use (TimeCategory)
{
temp=new Date()+30.days//current date 6-1-2016
}
println(sdf.format(temp))
这是输出:
2016-02-36
我尝试了
plus(30)
也给了我同样的结果。有没有办法正确地进行此增量?
在 Java 日期格式中,
D
代表“一年中的某一天”,因此是 6+30 = 36
。您想使用 d
表示“一个月中的某天”。
当您想要
Y
时,您还可以使用 y
(表示“周年”)而不是 M
(表示“年”)和 m
表示分钟。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
我会采用这种方法:
Calendar calendar = Calendar.getInstance()
calendar.add(Calendar.DAY_OF_YEAR, 30)
或者另一种方法是使用Joda Time
Java 语法:
LocalDate.now().plusDays( 30 )
现代解决方案使用 JSR 310 中定义的 java.time 类,这些类在 Java 8 及更高版本中找到。
Java 语法,因为我还没有学过 Groovy...
获取当前日期。这需要一个时区,因为对于任何给定时刻,全球各地的日期都会因时区而异。东京是“明天”,而美国俄亥俄州托莱多仍是“昨天”。
ZoneId z = ZoneId.of( "America/Edmonton" ) ;
LocalDate today = LocalDate.now( z ) ;
增加三十天。
LocalDate thirtyDaysFromToday = today.plusDays( 30 ) ;