【问题标题】:Groovy - String to TimeGroovy - 时间字符串
【发布时间】:2015-01-03 01:13:55
【问题描述】:

我有一个这样的字符串:

String timeString = "2230"

我想把它转换成时间类型。

我试过用这个

def bookingTime = new Date().parse("2230")

但它不起作用。有什么想法吗?

感谢您的帮助!

【问题讨论】:

    标签: java string time groovy type-conversion


    【解决方案1】:

    尝试(Groovy 实现):

    String timeString = "2230"
    def bookingTime = Date.parse("HHmm", timeString)
    

    【讨论】:

    • 我试过了,还是不行。它向我抛出了这样的异常:“引起:groovy.lang.MissingMethodException:没有方法签名:静态 java.util.Date.parse() 适用于参数类型:(java.lang.String, java.lang.字符串)值:{"HHmm", "1100"}"
    • 几乎不可能,这种方法从 1.5.7 版开始就很流行了。请编辑您的问题并提供完整(非)工作示例。
    【解决方案2】:

    我不太了解 Groovy,但我认为它没有自己的库,至少对于日期时间工作而言。所以这个答案是针对Java库的。

    日期时间与时间

    我想把它转换成时间类型。

    显然您只想表示一天中的某个时间,而没有任何日期或时区。

    与 Java 捆绑在一起的 java.util.Date/.Calendar 类表示日期和时间的组合。 (顺便说一下,这些类是出了名的麻烦、混乱和缺陷。避免它们。)

    因此,Java 7 及更早版本没有“时间”类型。 Java 有一个java.sql.Time,但是这个类是一个 hack。 .Time 是一个 j.u.Date,其日期部分设置为 1970 UTC 的第一天(epoch)。此类仅适用于数据库和 JDBC,即便如此,也会被 java.time 取代(见下文)。

    您应该使用以下任一:

    • Joda-Time图书馆
    • java.time 包(内置于 Java 8,受 Joda-Time 启发,由 JSR 310 定义)

    这两个库都提供了一个LocalTime 类(Joda-Timejava.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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多