如何格式化LocalTime变量

时间:2018-08-13 14:53:43

标签: java swing date nsdateformatter jodatime

我对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

2 个答案:

答案 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)

tl; dr

使用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.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance 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中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore