在 Groovy 中增加日期会得到错误的日期

问题描述 投票:0回答:3

在我的 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)
也给了我同样的结果。有没有办法正确地进行此增量?

groovy
3个回答
1
投票

在 Java 日期格式中,

D
代表“一年中的某一天”,因此是
6+30 = 36
。您想使用
d
表示“一个月中的某天”。

当您想要

Y
时,您还可以使用
y
(表示“周年”)而不是
M
(表示“年”)和
m
表示分钟。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

0
投票

我会采用这种方法:

Calendar calendar = Calendar.getInstance()
calendar.add(Calendar.DAY_OF_YEAR, 30)

或者另一种方法是使用Joda Time


0
投票

Java 语法:

LocalDate.now().plusDays( 30 )

java.time

现代解决方案使用 JSR 310 中定义的 java.time 类,这些类在 Java 8 及更高版本中找到。

Java 语法,因为我还没有学过 Groovy...

获取当前日期。这需要一个时区,因为对于任何给定时刻,全球各地的日期都会因时区而异。东京是“明天”,而美国俄亥俄州托莱多仍是“昨天”。

ZoneId z = ZoneId.of( "America/Edmonton" ) ;
LocalDate today = LocalDate.now( z ) ;

增加三十天。

LocalDate thirtyDaysFromToday = today.plusDays( 30 ) ;
© www.soinside.com 2019 - 2024. All rights reserved.