【问题标题】:Difficulty while converting string(date) to milliseconds In java [duplicate]在java中将字符串(日期)转换为毫秒时遇到困难[重复]
【发布时间】:2018-11-18 05:05:36
【问题描述】:

我有以下代码。我正在传递start = "2016/01/01 23:59:59"end = "2017/01/01 23:59:59"

func(String start, String end) {

    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date1 = sdf1.parse(start);
    long startTime = date1.getTime();
    \\System.out.println(startTime);

    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date2 = sdf2.parse(end);
    long endTime = date2.getTime();
    \\System.out.println(endTime);

}

我收到以下错误

error: unreported exception ParseException; must be caught or declared to be thrown Date date = sdf.parse(time); ^

我该如何纠正这个问题?还有,为什么会显示这个错误?

【问题讨论】:

  • 我建议你避开SimpleDateFormat 班级和朋友。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。 LocalDateTime.parse(start, DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss")).atZone(ZonId.systemDefault()).toInstant().toEpochMilli().
  • 作为 Ole V.V.评论说,仅供参考,非常麻烦的旧日期时间类,例如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代。见Tutorial by Oracle
  • 提示:String::replace( " " , "T" )LocalDateTime.parseLocalDateTime::atZoneZoneIdZonedDateTime::toInstant()Instant::toEpochMilli
  • @OleV.V.我可以知道使用这些内置函数的时间复杂度吗?
  • 我不知道,@yahooo。对我来说从来都不是问题。我通常希望他们花费恒定的时间。

标签: java string date string-parsing


【解决方案1】:

DateFormat#parse() 方法会抛出 ParseException。这意味着如果在将字符串解析为日期时出现问题,则可能会抛出此异常。

一个解决方法是只声明你的方法来抛出这个异常,例如

public long yourMethod() throws ParseException {
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date1 = sdf1.parse(start);
    long startTime = date1.getTime();

    return startTime;
}

或者,也可以从错误消息中获取建议,您可以将代码放入 try catch 块中:

public long yourMethod() {
    long startTime = -1L;
    try {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date1 = sdf1.parse(start);
        startTime = date1.getTime();
    }
    catch (ParseException e) {
        // something went wrong
    }

    return startTime;
}

【讨论】:

  • 感谢您的回答。另外,我可以知道为什么它向我显示此错误吗?我正在传递指定格式的日期。
  • @yahooo 检查我的更新答案。
  • 仅供参考,非常麻烦的旧日期时间类,例如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle
  • @BasilBourque 我完全同意,但也许 OP 询问了 Java 7 日期,因为他一定会出于某种原因使用它们(例如,我自己目前正在将 Java 6 用于遗留项目)。跨度>
  • 仅供参考,几乎所有 java.time 功能都可以在 Java 6 和 7 的 ThreeTen-Backport 项目中找到,API 几乎相同。在ThreeTenABP项目中进一步适配Android
猜你喜欢
  • 2012-01-15
  • 2012-08-11
  • 2012-09-12
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
相关资源
最近更新 更多