【问题标题】:Parsing "12:00" to Time in java [duplicate]在java中将“12:00”解析为时间[重复]
【发布时间】:2021-11-30 12:31:26
【问题描述】:

我正在使用此方法将字符串解析为 Java 中的 SQL 时间。但是,它不能很好地工作,因为当我输入“12:00”时它返回一个负值的日期。

方法如下:

public static Time isoStringToTime(String isoTimeString) {
        try {
            
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm", new Locale("es", "ES"));
        return new Time(sdf.parse(isoTimeString).getTime());
        } catch (ParseException e) {
            throw new ApplicationException("Formato ISO incorrecto para fecha: " + isoTimeString);
        }
    }

引入“12:00”的新返回时间为负值,-3600000 为负值。

【问题讨论】:

  • HH:mm 是您正在寻找的模式
  • 是的,在 Eclipse 中很抱歉,我有这种格式
  • 为我工作:ideone.com/m2gtBG
  • SimpleDateFormat 不是线程安全的,您应该更喜欢在新代码中使用java.time.format.DateTimeFormatter
  • 我建议你不要使用SimpleDateFormatTimeSimpleDateForamt 是出了名的麻烦,Time 是对已经设计不佳的 Date 类的真正破解,并且两者(以及所有三个)都已经过时了。相反,只需使用来自java.time, the modern Java date and time APILocalTime

标签: java sql time


【解决方案1】:

tl;博士

LocalTime.parse( "12:00" )

详情

您使用的日期时间类在几年前被 JSR 310 中定义的现代 java.time 类所取代。切勿使用 java.sql.TimeDateCalendarSimpleDateFormat 班级。

LocalTime lt = LocalTime.parse( "12:00" ) ;

要捕获错误输入,请捕获DateTimeParseException

LocalTime lt = null ;
try {
    lt = LocalTime.parse( "12:00" ) ;
} catch ( DateTimeParseException e ) {
    … // Handle faulty input.
}

使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序提交到数据库。

myPreparedStatement.setObject( … , lt ) ;

从数据库中检索。

LocalTime lt = myResultSet.getObject( … , LocalTime.class ) ;

所有这些都已经在 Stack Overflow 上介绍过很多次了。所以搜索以了解更多信息。

【讨论】:

  • 非常感谢,它成功了!这些方法是我大学的老师给我的,我猜他们不是那么最新:)
  • @DiegoGonzálezSuárez 太可悲了。 java.time 类在七年前的 2014 年到达Java 8。 Java 8 非常重要,它是第一个长期支持 (LTS) 版本。
  • 这些类于 1997 年在 Java 1.1 中被弃用。
  • @MarlinPierce 不,这些类没有被弃用,只有它们的许多方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多