Simpledateformat解析字符串日期错误

时间:2019-08-02 08:01:39

标签: java date simpledateformat

我正在尝试将数据从字符串转换为Data类,以便以后可以将其与其他数据进行比较。

我的数据格式:dd-MM-yyyy(例如31-07-2019)。

问题是在format.parse("string date")操作之后,它向我显示了错误的数据格式:

Wed Jul 31 00:00:00 UTC 2019

这是我的代码:

import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.*;

public class Program {

    public static void main(String[] args) {
        SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

        try {
            String dateString = format.format(new Date());
            String dateStr = "31-07-2019";
            Date date = format.parse(dateStr);

            System.out.println(dateString);
            System.out.println(date);
        } catch (ParseException e) {
            System.out.println("ParseError " + e.getMessage());
        }       
    }
}

dateString(当前日期)成功解析。

3 个答案:

答案 0 :(得分:5)

使用java.time代替java.util来设置日期和时间以及格式和解析。

public static void main(String args[]) throws Exception {
    // create a custom formatter for your pattern       
    DateTimeFormatter euroDtf = DateTimeFormatter.ofPattern("dd-MM-yyyy");
    // receive today's date
    LocalDate today = LocalDate.now();
    // parse a date that has the form of your pattern using your custom formatter
    LocalDate parsedDate = LocalDate.parse("31-07-2019", euroDtf);

    System.out.println("Today is " + today.format(euroDtf));
    System.out.println("Parsed date is " + parsedDate.format(euroDtf));
}

答案 1 :(得分:3)

我会说SimpleDateFormat是旧版,请使用jdk-8 LocalDate

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate date1 = LocalDate.parse("31-07-2019",formatter);
LocalDate date2 = LocalDate.now();

您还可以使用isBefore, isAfter进行比较

date1.isAfter(date2);
date2.isBefore(date2);

默认情况下,LocalDateISO-8601格式返回日期

  

ISO-8601日历系统中没有时区的日期,例如2007-12-03。

比较之后,您可以使用相同的格式化程序将LocalDate格式化为字符串

String date2 = LocalDate.now().format(formatter);

SimpleDateFormat.parse返回java.util.Date对象

public Date parse(String source) throws ParseException

Date.toString()代表模式的字符串

public String toString()

 Converts this Date object to a String of the form:

     dow mon dd hh:mm:ss zzz yyyy

答案 2 :(得分:1)

这是预期的行为

  

Date类表示特定时间点,以毫秒为单位   精度。

format()将以“ 格式”生成日期的字符串表示形式。 parse()将返回一个日期对象,该对象将始终为“ Sri 2019年8月2日星期五16:14:21”格式。

请务必注意,构造函数中提供的模式应与使用parse方法解析的日期格式相同。