Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleDataFormat解析字符串日期错误_Java_Date_Simpledateformat - Fatal编程技术网

Java SimpleDataFormat解析字符串日期错误

Java SimpleDataFormat解析字符串日期错误,java,date,simpledateformat,Java,Date,Simpledateformat,我正在尝试将数据从字符串转换为数据类,以便以后可以将其与其他数据进行比较 我的数据格式:dd-MM-yyyy(示例31-07-2019) 问题是在format.parse(“字符串日期”)操作之后,它会向我显示错误的数据格式: 2019年7月31日星期三00:00:00 UTC 这是我的密码: import java.text.SimpleDateFormat; import java.text.ParseException; import java.io.ByteArrayInputStrea

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

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

问题是在
format.parse(“字符串日期”)
操作之后,它会向我显示错误的数据格式:

2019年7月31日星期三00:00:00 UTC

这是我的密码:

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
(当前日期)解析成功。

我想说
SimpleDateFormat
是遗留的,请使用jdk-8
LocalDate

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate date1 = LocalDate.parse("31-07-2019",formatter);
LocalDate date2 = LocalDate.now();
你也可以用它来比较

date1.isAfter(date2);
date2.isBefore(date2);
默认情况下,
LocalDate
ISO-8601
格式返回日期

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

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

String date2 = LocalDate.now().format(formatter);
返回
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

使用
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));
}

这是预期的行为

类日期表示特定的时间瞬间,以毫秒为单位 精确性

format()将以“格式”生成日期的字符串表示形式。 parse()将返回一个日期对象,该对象将始终采用“Fri Aug 02 16:14:21 SGT 2019”格式


这里需要注意的是,构造函数中提供的模式的格式应该与使用解析方法解析的日期的格式相同。

基本上是在调用
System.out.println(date)时
,您正在调用
System.out.println(date.toString())
-如果您查看
Date
toString
方法,您会发现它当然没有使用
SimpleDataFormat
我该如何处理它?如果您只是担心日期如何打印,那根本不是解析问题。这是一个格式问题。
SimpleDateFormat
是出了名的麻烦,
Date
的设计也很糟糕。两者都早已过时。我建议您使用现代的
LocalDate
DateTimeFormatter
。无论我们谈论的是
Date
还是
LocalDate
,它们都没有格式,因为它们不能有格式。因为你希望他们能够比较,所以这个事实不应该让你担心。它显示的日期向后,比如:2019-07-31 2019-08-02