【问题标题】:Unparseable date: "Apr 5, 2018" in Java [closed]无法解析的日期:Java 中的“2018 年 4 月 5 日”[关闭]
【发布时间】:2018-04-12 22:46:49
【问题描述】:

我只想在Month,Year 中输出输出,但我遇到了问题。它是Unparseable date: "Apr 5, 2018"Exception。我已将日期存储在sqlite 中的Bill_Date 列中,并且其字段中的格式为"Apr 5, 2018"。那么我怎样才能仅以 (Apr, 2018) 格式获得月份和年份。这是我在下面给出的代码:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

public class Demo2 {
    private static Connection con;
    private static String query;
    private static PreparedStatement PStat,PStat2;
    private static ResultSet res,res2;
    private static String Bill_Date;
public static void main(String args[])
{
    try
    {
        con=Database.Database();
        query="select Bill_Date from DailySales where Bill_Date='Apr 5, 2018'";
        PStat=con.prepareStatement(query);
        res=PStat.executeQuery();
        while(res.next())
        {
        Bill_Date=res.getString("Bill_Date");
        }
        SimpleDateFormat month=new SimpleDateFormat("MMMM,yyyy",Locale.ENGLISH);
        SimpleDateFormat dateformat=new SimpleDateFormat("MMM-dd,YYYY");
        Date date=dateformat.parse(Bill_Date);
        String MONTH=month.format(date);
        System.out.println(MONTH);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
}

有这个错误。

java.text.ParseException: Unparseable date: "Apr 5, 2018"
    at java.text.DateFormat.parse(Unknown Source)
    at Demo2.main(Demo2.java:34)

【问题讨论】:

  • 问自己这个问题 - MMM-dd,YYYYApr 5, 2018 有何相同之处?
  • 除非您完全控制输入字符串,否则您的企业注定要失败。随机外部程序生成的日期格式差异太大,Java 的 dateformat 类无法处理。
  • 仅供参考,麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.见Tutorial by Oracle

标签: java date exception unparseable


【解决方案1】:

两个问题:

  1. 使用大写字母Y 表示称为"week year",与年份不同。请改用ys。
  2. 您有一个-,其格式在日期字符串中不存在。使格式具有空格(或使数据具有-)。

使用这个:

SimpleDateFormat dateformat = new SimpleDateFormat("MMM d,yyyy");

【讨论】:

  • 逗号后需要空格
  • @DavidConrad 我在发布后注意到了这一点,但它似乎仍然有效。理想的和迂腐的,是的,把那个空间放在格式中。但这似乎没有必要。
【解决方案2】:

格式化程序中缺少一个空格,您还有一个额外的-

SimpleDateFormat dateformat=new SimpleDateFormat("MMM dd, yyyy");

谢谢@David

另外,您的年份格式似乎是错误的。使用 yyyy 获取正确的年份格式。

【讨论】:

  • 错误的年份。大写 Y 是“周年”。
猜你喜欢
  • 2018-08-09
  • 2021-07-05
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2015-07-01
  • 2011-03-28
相关资源
最近更新 更多