首页 文章

Oracle约会到Java日期

提问于
浏览
8

SimpleDateFormat用于解析Oracle日期的内容是什么?

我正在使用这个SimpleDateFormat .

SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy / mm / dd hh:mm:ss.sss”);它给出了这个例外 . java.text.ParseException:Unparseable date:“2011-08-19 06:11:03.0”

请告诉我要使用的SimpleDateFormat . 谢谢 .

2 回答

  • 13

    您应该使用此模式 "yyyy-MM-dd HH:mm:ss.S" 而不是 "yyyy/mm/dd hh:mm:ss.sss" .

    "Hour in am/pm (1-12)"的小 h 和"Hour in day (0-23)"的 H
    看到这里:SimpleDateFormat

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    Date date = dateFormat.parse("2011-08-19 06:11:03.0");
    
  • 0

    tl;博士

    LocalDateTime.parse( 
        "2011-08-19 06:11:03.0".replace( " " , "T" ) 
    )
    

    详情

    您的输入字符串与格式设置模式不匹配 . 您的模式具有斜杠字符,其中数据具有连字符 .

    java.time

    此外,您正在使用现在遗留下来的可怕的旧日期时间类,取而代之的是java.time类 .

    您的输入字符串几乎符合日期时间格式的ISO 8601标准 . 用 T 替换中间的SPACE .

    String input = "2011-08-19 06:11:03.0".replace( " " , "T" ) ;
    

    您的输入缺少任何时区指示符或与UTC的偏移量 . 所以我们解析为LocalDateTime,对于缺少任何区域/偏移概念的对象 .

    LocalDateTime ldt = LocalDateTime.parse( input ) ;
    

    要以标准格式生成字符串,请调用 toString .

    String output = ldt.toString() ;
    

    如果此输入用于特定时区,请进行分配 .

    ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
    ZonedDateTime zdt = ldt.atZone( z ) ;
    

    关于java.time

    java.time框架内置于Java 8及更高版本中 . 这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat .

    现在位于maintenance modeJoda-Time项目建议迁移到java.time类 .

    要了解更多信息,请参阅Oracle Tutorial . 并搜索Stack Overflow以获取许多示例和解释 . 规格是JSR 310 .

    如果JDBC driver符合JDBC 4.2或更高版本,则可以直接与数据库交换java.time对象 . 不需要字符串或java.sql . *类 .

    从哪里获取java.time类?

    ThreeTen-Extra项目使用其他类扩展java.time . 该项目是未来可能添加到java.time的试验场 . 您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore .

相关问题