当前位置: 首页 > 知识库问答 >
问题:

JavaSimpleDateFormat不检测月份[重复]

东方和惬
2023-03-14

我在Java中使用SimpleDataFormat,由于某种原因,它没有检测到月份。这是我的代码:

     /**
     * Takes a date/time stamp which looks like yyyyMMDDhhmmss on converts it to
     * yyyy-MM-DDThh:mm:ssZ
     *
     * @param timestamp
     * @return
     */
    public static String ConvertDate(String timestamp) {
        if (timestamp == null || timestamp.length() < 14)
            return null;

        String timeString = null;

        System.out.println(timestamp);
        DateFormat outputFormat = new SimpleDateFormat("YYYY-MM-DD'T'hh:mm:ss'Z'");
        DateFormat inputFormat = new SimpleDateFormat("yyyyMMDDhhmmss");

        try{
            Date date = inputFormat.parse(timestamp);
            timeString = outputFormat.format(date);
        }
        catch(Exception e){}

        return timeString;
    }

调用此方法:ConvertDate("20190803122424")返回以下内容:2019-01-03T12:24:24Z而我想返回:2019-08-03T12:24:24Z

我的输出格式有问题吗?

共有2个答案

公冶同
2023-03-14

由于每个人都指出您的格式化程序yyyMMDDhmmss是错误的,因此请使用有效格式创建DateTimeFormaster

DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

并使用java-8日期时间API将其解析为本地日期时间,然后使用ZonedDateTime将其解析为UTC格式

String dateString = "20190803122424";

LocalDateTime localDateTime = LocalDateTime.parse(dateString,inputFormat);

然后可以将其转换为OffsetDateTime

 OffsetDateTime outputDateTime = localDateTime.atOffset(ZoneOffset.UTC);

如果您特别想要ZoneDateTime

ZonedDateTime outputDateTime = localDateTime.atZone(ZoneOffset.UTC);
秦胡媚
2023-03-14

您使用了错误的日期格式字符串:DD(年中的天),而不是DD(月中的天)。将两个SimpleDataFormat实例都更改为使用dd:

DateFormat inputFormat = new SimpleDateFormat("yyyyMMddhhmmss");
DateFormat outputFormat = new SimpleDateFormat("YYYY-MM-dd'T'hh:mm:ss'Z'");

因此,你得到了错误的结果。

 类似资料:
  • 问题内容: 是否存在以下代码的类似形式: 还是必须是: 我正在尝试写一份声明,检查本月是否超过31天。 编辑 我想真正的问题是我理解了我所学到的一些知识,但是每次我尝试使用有关Java的sun网站时,都会感到困惑。我的问题是,如果我从用户那里得到一个月和一天,然后将其放入MM / dd格式并对其进行评估,那么有一种更简便的方法来检查月份和日期是否有效以及在检查之后是有效的,我可以用我拥有的格式打印

  • 下面,我有我试图使用的代码。它总是命中捕捉,返回空。月和日都是整数,它们已经过检查,以确保它们在现有日期内。不管怎样,我用“05”测试一个月,用“02”测试一天。由于某种原因, ##/## 输入不起作用吗? 编辑:我正在尝试格式化此输出,使其看起来像“May 02”。当我查看文档时,我看到页面的很大一部分专门用于格式化输出。为什么我的格式不是这样?

  • 我有一个包含以下字段的表: 报告(表名)Rep_Date(日期)Rep_Time(日期) 更新15:58我现在可以执行以下查询: 但是,我需要在子句中再添加一条语句,将MaxDate的时间部分与rep_time:不起作用。

  • 这是我的oracle sql查询。我正在用Python运行它。当我在Oracle SQL Developer中运行它时,它会给出结果,但每当我试图在pycharm中执行它时,就会出现以下错误: cx_oracle.databaseError:ORA-01843:不是有效月份 当我跑的时候 这在oracle sql developer中显示

  • 我为PHP更改了OCI8版本,由于该查询不起作用: 我收到这个消息: 消息:oci_execute():ora-01843:不是有效月份 它与Toad一起用于Oracle11。你有什么解决办法吗? 谢谢:)