我想知道除了用Date.parse方法从String中解析它之外,是否还有其他方法可以在特定的日期和时间在Groovy中创建新的Date。我可以得到在Groovy中创建Date的完整列表吗?
Date.parse
String
Date
ibrsph3r1#
您可以使用现有的Java方法来创建日期:
// takes the date encoded as milliseconds since midnight, January 1, 1970 UTC def mydate = new Date(System.currentTimeMillis()) // create from an existing Calendar object def mydate = new GregorianCalendar(2014, Calendar.APRIL, 3, 1, 23, 45).time
Groovy还提供了一些简化的扩展来创建日期。Date.parse()和Date.parseToStringDate()从一个String中解析它。Date.copyWith()方法从一个map中构建一个日期。你可以这样使用它们:
Date.parse()
Date.parseToStringDate()
Date.copyWith()
// uses the format strings from Java's SimpleDateFormat def mydate = Date.parse("yyyy-MM-dd hh:mm:ss", "2014-04-03 1:23:45") // uses a format equivalent to EEE MMM dd HH:mm:ss zzz yyyy def mydate = Date.parseToStringDate("Thu Apr 03 01:23:45 UTC 2014") def mydate = new Date().copyWith( year: 2014, month: Calendar.APRIL, dayOfMonth: 3, hourOfDay: 1, minute: 23, second: 45)
agxfikkp2#
其他的答案在Java8和更高版本中已经过时了。旧的遗留日期-时间类,如java.util.Date/.Calendar/.GregorianCalendar,已经被证明是设计糟糕、混乱和麻烦的。
java.time框架取代了那些旧的类。Groovy当然可以使用这些类。我不知道Groovy的语法,但是改编这个简单的Java示例应该很容易。
LocalDate和LocalTime类没有时区的概念,因此它们不表示时间线上的实际时刻。
LocalDate
LocalTime
LocalDate localDate = LocalDate( 2016 , Month.JANUARY , 2 ); // year, month, date. LocalTime localTime = LocalTime( 12 , 30 , 0 , 0 ); // hour, minute, second, nanosecond.
ZonedDateTime
应用一个时区(ZoneId)得到一个ZonedDateTime。使用一个proper time zone name,千万不要使用常见的3-4个时区缩写。
ZoneId
ZoneId zoneId = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = ZonedDateTime.of( localDate , localTime , zoneId );
Instant
您应该避免使用旧的日期-时间类。但是如果需要,您可以进行转换。Instant是java.time类,用于表示UTC时间线上的某个时刻,精度为纳秒。在旧的java.util.Date类上寻找新的方法,以便与Instant进行转换。我们可以从ZonedDateTime中提取所需的Instant对象。
请注意,从 * java.time转换 * 会导致数据丢失!java.time类支持nanosecond分辨率(小数秒最多9位小数),而旧的java.util.Date只支持milliseconds(最多3位小数)。小数秒的任何第4到第9位数都将被截断。例如,2016-04-28T02:05:05.123456789将被截断为2016-04-28T02:05:05.123。
2016-04-28T02:05:05.123456789
2016-04-28T02:05:05.123
Instant instant = zdt.toInstant(); java.util.Date utilDate = java.util.Date.from( instant );
相反,从java.util.Date到Instant,小数秒的第4到第9位小数将为零,第1到第3位小数表示任何毫秒。
Instant instant = utilDate.toInstant();
snz8szmq3#
Groovy不错。
new Date(2016-1900, 7, 16, 20, 32, 25)
太平洋夏令时2016年8月16日星期二20:32:25请注意,必须对年份进行处理,但您可以创建一个新的Java Date来表示所需的任何秒。您可以在http://mrhaki.blogspot.com/2009/08/groovy-goodness-working-with-dates.html上看到更多Groovy Goodness
smdnsysy4#
据我所知,没有其他的方法。你也可以把精确的时间传递给Date类的构造函数,但是首先你需要得到时间。也许这个link会有帮助。或以下代码片段:
def calendar = new GregorianCalendar(2011,1,7,15,7,23) def date = calendar.getTime() println date
jckbn6z75#
您可以使用Date()获取当前日期,并使用以下命令将其格式化为您想要的格式:
Date()
/* y: year m: month d: day h: hour m: minute */ Date().format('yyyy-MM-dd hh-mm') Date().format('yy/mm/dd hh')
返回类型为字符串。
w80xi6nr6#
LocalDateTime.now为“年-月(日(小时-分钟”
6条答案
按热度按时间ibrsph3r1#
您可以使用现有的Java方法来创建日期:
Groovy还提供了一些简化的扩展来创建日期。
Date.parse()
和Date.parseToStringDate()
从一个String中解析它。Date.copyWith()
方法从一个map中构建一个日期。你可以这样使用它们:agxfikkp2#
其他的答案在Java8和更高版本中已经过时了。旧的遗留日期-时间类,如java.util.Date/.Calendar/.GregorianCalendar,已经被证明是设计糟糕、混乱和麻烦的。
java.时间
java.time框架取代了那些旧的类。
Groovy当然可以使用这些类。我不知道Groovy的语法,但是改编这个简单的Java示例应该很容易。
第一个月/第一个月
LocalDate
和LocalTime
类没有时区的概念,因此它们不表示时间线上的实际时刻。ZonedDateTime
(四个月)应用一个时区(
ZoneId
)得到一个ZonedDateTime
。使用一个proper time zone name,千万不要使用常见的3-4个时区缩写。Instant
您应该避免使用旧的日期-时间类。但是如果需要,您可以进行转换。
Instant
是java.time类,用于表示UTC时间线上的某个时刻,精度为纳秒。在旧的java.util.Date类上寻找新的方法,以便与Instant
进行转换。我们可以从ZonedDateTime
中提取所需的Instant
对象。纳秒与毫秒
请注意,从 * java.time转换 * 会导致数据丢失!java.time类支持nanosecond分辨率(小数秒最多9位小数),而旧的java.util.Date只支持milliseconds(最多3位小数)。小数秒的任何第4到第9位数都将被截断。例如,
2016-04-28T02:05:05.123456789
将被截断为2016-04-28T02:05:05.123
。相反,从java.util.Date到
Instant
,小数秒的第4到第9位小数将为零,第1到第3位小数表示任何毫秒。snz8szmq3#
Groovy不错。
太平洋夏令时2016年8月16日星期二20:32:25
请注意,必须对年份进行处理,但您可以创建一个新的Java Date来表示所需的任何秒。
您可以在http://mrhaki.blogspot.com/2009/08/groovy-goodness-working-with-dates.html上看到更多Groovy Goodness
smdnsysy4#
据我所知,没有其他的方法。你也可以把精确的时间传递给Date类的构造函数,但是首先你需要得到时间。
也许这个link会有帮助。
或以下代码片段:
jckbn6z75#
您可以使用
Date()
获取当前日期,并使用以下命令将其格式化为您想要的格式:返回类型为字符串。
w80xi6nr6#
LocalDateTime.now为“年-月(日(小时-分钟”