【发布时间】:2015-01-03 01:13:55
【问题描述】:
我有一个这样的字符串:
String timeString = "2230"
我想把它转换成时间类型。
我试过用这个
def bookingTime = new Date().parse("2230")
但它不起作用。有什么想法吗?
感谢您的帮助!
【问题讨论】:
标签: java string time groovy type-conversion
我有一个这样的字符串:
String timeString = "2230"
我想把它转换成时间类型。
我试过用这个
def bookingTime = new Date().parse("2230")
但它不起作用。有什么想法吗?
感谢您的帮助!
【问题讨论】:
标签: java string time groovy type-conversion
尝试(Groovy 实现):
String timeString = "2230"
def bookingTime = Date.parse("HHmm", timeString)
【讨论】:
我不太了解 Groovy,但我认为它没有自己的库,至少对于日期时间工作而言。所以这个答案是针对Java库的。
我想把它转换成时间类型。
显然您只想表示一天中的某个时间,而没有任何日期或时区。
与 Java 捆绑在一起的 java.util.Date/.Calendar 类表示日期和时间的组合。 (顺便说一下,这些类是出了名的麻烦、混乱和缺陷。避免它们。)
因此,Java 7 及更早版本没有“时间”类型。 Java 有一个java.sql.Time,但是这个类是一个 hack。 .Time 是一个 j.u.Date,其日期部分设置为 1970 UTC 的第一天(epoch)。此类仅适用于数据库和 JDBC,即便如此,也会被 java.time 取代(见下文)。
您应该使用以下任一:
这两个库都提供了一个LocalTime 类(Joda-Time、java.time)来表示没有日期和时区的仅时间值。
Joda-Time 2.5 中的一些示例代码,使用 Java 语法而不是 Groovy。
如果您的输入字符串有冒号,它将遵循标准 ISO 8601 格式。默认情况下,Joda-Time 和 java.time 都使用标准格式来解析和生成字符串。
LocalTime localTime = LocalTime.parse( "18:55" ); // ISO 8601 format used by default.
System.out.println( "localTime: " + localTime ); // localTime: 18:55:00.000
对于您的非标准格式,您必须指定格式化程序。
LocalTime localTime2 = DateTimeFormat.forPattern( "HHmm" ).parseLocalTime( "2230" );
System.out.println( "localTime2: " + localTime2 ); // localTime2: 22:30:00.000
【讨论】: