代码之家  ›  专栏  ›  技术社区  ›  Vinayak Bevinakatti

将字符串转换为java.util.date

  •  28
  • Vinayak Bevinakatti  · 技术社区  · 16 年前

    我将日期存储在sqlite数据库中,格式如下:

    d-MMM-yyyy,HH:mm:ss aaa
    

    当我用这种格式检索日期时,我会得到所有的东西。 除了时间。时间总是 00 . 以下是我的输出:

    String date--->29-Apr-2010,13:00:14 PM
    After convrting Date--->1272479414000--Thu Apr 29 00:00:14 GMT+05:30 2010
    

    代码如下:

        Date lScheduledDate = CalendarObj.getTime();
        DateFormat formatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa");
        SomeClassObj.setTime(formatter.format(lScheduledDate));
    
        String lNextDate = SomeClassObj.getTime();
        DateFormat lFormatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa");
        Date lNextDate = (Date)lFormatter.parse(lNextDate);
        System.out.println("output here"+lNextDate);
    

    我做错什么了?

    4 回复  |  直到 7 年前
        1
  •  54
  •   Peter Mortensen Pieter Jan Bonestroo    8 年前

    我认为你的日期格式不合理。没有下午13点。删除格式末尾的“aaa”或将hh转换为hh。

    不过,这对我来说还是不错的:

    String testDate = "29-Apr-2010,13:00:14 PM";
    DateFormat formatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa");
    Date date = formatter.parse(testDate);
    System.out.println(date);
    

    它打印了“2010年4月29日星期四13:00:14 CEST”。

        2
  •  4
  •   azp74    16 年前

    听起来您可能需要使用simpledateformat之类的内容。 http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

    声明日期格式,然后用字符串调用Parse方法。

    private static final DateFormat DF = new SimpleDateFormat(...);
    Date myDate = DF.parse("1234");
    

    正如吉劳姆所说,设定时区!

        3
  •  2
  •   Guillaume    16 年前

    您应该以日期格式设置时区,否则它将使用默认时区(取决于计算机的设置)。

        4
  •  0
  •   Anonymous    7 年前

    Java.时间

    2010, java.util.Date 我们都用过的那门课吗 DateFormat Calendar ),这些课程总是设计得很差,现在已经过时很久了。今天,我们将使用Java.Times,现代Java日期和时间API。

            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yyyy,HH:mm:ss");
    
            String dateTimeStringFromSqlite = "29-Apr-2010,13:00:14";
            LocalDateTime dateTime = LocalDateTime.parse(dateTimeStringFromSqlite, formatter);
            System.out.println("output here: " + dateTime);
    

    输出为:

    输出地点:2010-04-29t13:00:14

    你的代码出了什么问题?

    大写字母的组合 HH aaa 在您的格式中,模式字符串没有多大意义,因为 HH 表示一天中的某个小时,从中呈现AM/PM标记 美国农业协会 多余的不过,这不会造成任何伤害,而且我无法复制您报告的确切结果。在任何情况下,你的评论都是切中要害的,不管人们是否使用老式的 SimpleDateFormat 还是现代 DateTimeFormatter :

    不应使用“aaa”,如果使用“aaa”,请指定“hh”

    小写字母 hh 是在上午或下午1点到12点之间的一小时,因此需要一个上午/下午标记。

    其他提示

    • 在您的数据库中,由于我了解到sqlite没有内置的datetime类型,因此请使用标准的ISO 8601格式,并以UTC格式存储时间。 2010-04-29T07:30:14Z (现代 Instant 类将字符串解析并格式化为其默认值,即不使用任何显式格式化程序)。
    • 不要使用偏移量,例如 GMT+05:30 时区。喜欢实时区域,例如亚洲/科伦坡、亚洲/加尔各答或美国/纽约。
    • 如果你想用过时的 数据格式 它的 parse 方法返回 Date 所以你不需要演员阵容 Date lNextDate = (Date)lFormatter.parse(lNextDate); .

    问:我可以在Android上使用java.time吗?

    是的,java.time在旧的和新的Android设备上工作得很好。至少需要 爪哇6 .

    • 在Java 8和以后以及新的Android设备(API级别26)中,现代API是内置的。
    • 在Java 6和7中获得了TrimeTeN后端,即现代类的后端(JSR 310的三层,参见底部的链接)。
    • 在(旧版)Android上,使用Android版的threeten backport。它被称为“threetenabp”。并确保从导入日期和时间类 org.threeten.bp 带有子包。

    链接

    推荐文章