tl;博士
使用 Java 内置的 java.time 类,而不是 Joda-Time。
LocalTime.parse( "23:45:12.123456789" ) // Represent a time-of-day without date and without time zone. Parsing standard ISO 8601 format HH:MM:SS.SSSSSSSSS in 24-hour clock. Returns a `LocalTime` object.
.truncatedTo( ChronoUnit.MINUTES ) // Produce a new value, based on original, but lopping off any seconds or fractional-second. Returns another `LocalTime` object.
.toString() // Generate a `String` with text representing the value of this date-time value, using standard ISO 8601 format. Returns a `String` object.
23:45
但我收到 LocalTime.parse 的错误
您指定的格式模式必须与输入字符串匹配——您的格式不匹配。
如上面的代码所示,如果输入标准 ISO 8601 格式,内置的 LocalTime.parse 功能会处理变化。所以根本不需要费心指定格式模式。
详情
Answer by Reimeus 是正确的,但使用了过时的 Joda-Time 类。虽然是一个优秀的库,但它的创建者(主要是 Stephen Colebourne)继续创建 Java 8 及更高版本中内置的 java.time 类。 Joda-Time 项目现在处于维护模式,并建议迁移到 java.time。
java.time
如果您的用户输入采用标准ISO 8601 格式,则无需指定格式模式来解析字符串输入。这意味着使用 1-23 小时的 24 小时制时钟,以及 1-9 小时的前导填充零:01-09。 java.time 类在解析/生成字符串时默认使用标准 ISO 8601 格式。
String input1 = "23:45";
String input2 = "23:45:12";
String input3 = "23:45:12.123456789";
LocalTime lt1 = LocalTime.parse( input1 );
LocalTime lt2 = LocalTime.parse( input2 );
LocalTime lt3 = LocalTime.parse( input3 );
System.out.println( lt1 );
System.out.println( lt2 );
System.out.println( lt3 );
23:45
23:45:12
23:45:12.123456789
抑制显示
如果您想禁止显示任何秒或小数秒,请使用DateTimeFormatter 类。该课程有很好的文档记录,并且已经在 Stack Overflow 上多次介绍过,因此请搜索更多讨论和示例。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "HH:mm" , Locale.US ) ;
String output = myLocalTime.format( f ) ;
23:45
截断
如果您想从日期时间值中删除任何秒或小数秒,请截断。
LocalTime.parse( "23:45:12" )
.truncatedTo( ChronoUnit.MINUTES )
.toString()
23:45
……或者……
LocalTime.parse( "23:45:12.123456789" )
.truncatedTo( ChronoUnit.MINUTES )
.toString()
23:45
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。