我对Java windowbuilder还是很陌生,这是我第一个项目的一部分。
String starttime = JOptionPane.showInputDialog(null, "What time would you like to start your revision ? (ie:12:24) ");
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
LocalTime start = LocalTime.parse(starttime,dtf);
我想将起始格式从("HH:mm:ss..etc")
转换为("HH:mm")
,但是由于某种原因,我遇到了LocalTime.parse
的错误。任何建议我应该怎么做。
我正在使用Joda Time
答案 0 :(得分:4)
您在ofPattern
中错误地引用了java.time
。使用JodaTime的forPattern
DateTimeFormatter dtf = DateTimeFormat.forPattern("HH:mm");
LocalTime start = LocalTime.parse(starttime, dtf);
System.out.println(dtf.print(start));
或者简单地
System.out.println(LocalTime.parse(startTime).toString("HH:mm"));
答案 1 :(得分:0)
使用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 。
如果您的用户输入采用标准的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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。