Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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

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 如何解析日期?_Java_Date_Simpledateformat - Fatal编程技术网

Java 如何解析日期?

Java 如何解析日期?,java,date,simpledateformat,Java,Date,Simpledateformat,我正在尝试使用simpleDataFormat解析此日期,但它不起作用: import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Formaterclass { public static void main(String[] args) throws ParseException{ String strDate = "

我正在尝试使用
simpleDataFormat
解析此日期,但它不起作用:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Formaterclass {
    public static void main(String[] args) throws ParseException{
        String strDate = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date dateStr = formatter.parse(strDate);
        String formattedDate = formatter.format(dateStr);
        System.out.println("yyyy-MM-dd date is ==>"+formattedDate);
        Date date1 = formatter.parse(formattedDate);

        formatter = new SimpleDateFormat("dd-MMM-yyyy");
        formattedDate = formatter.format(date1);
        System.out.println("dd-MMM-yyyy date is ==>"+formattedDate);
    }
}
如果我用strDate=
“2008-10-14”
尝试这段代码,我会得到一个肯定的答案。有什么问题吗?如何解析此格式


另外,我是从一个
jDatePicker
获取这个日期的,没有说明如何修改用户选择日期时获取的日期格式。

问题是您的日期格式如下:

Thu Jun 18 20:56:02 EDT 2009
EEE MMM dd HH:mm:ss zzz yyyy
Thu Jun 18 20:56:02 EDT 2009
但是使用的是
SimpleDataFormat
,即:

yyyy-MM-dd
这两种格式不一致。您需要构造一个与您试图解析为日期的字符串的布局相匹配的。为了便于查看,您需要一个
SimpleDataFormat
,如下所示:

Thu Jun 18 20:56:02 EDT 2009
EEE MMM dd HH:mm:ss zzz yyyy
Thu Jun 18 20:56:02 EDT 2009

检查我链接到的JavaDoc页面,看看字符是如何使用的。

您不能期望使用不同格式设置的SimpleDataFormat解析日期

要解析“Thu Jun 18 20:56:02 EDT 2009”日期字符串,您需要这样一个简单的格式(大致如下):

使用此函数将字符串解析为日期,然后使用另一个SimpleDataFormat将该日期转换为所需的格式

        String input = "Thu Jun 18 20:56:02 EDT 2009";
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
        Date date = parser.parse(input);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(date);

        ...
JavaDoc:

怎么样?无论如何,特别是在代码问题上,问题在于这一行:

new SimpleDateFormat("yyyy-MM-dd");

构造函数中的字符串必须与日期的格式匹配。关于如何做到这一点的文档是。看起来你需要一些类似“EEE MMM d HH:mm:ss zzz yyyy”的东西

我们现在有了一种更现代的方法来完成这项工作

java.time 该框架与Java8及更高版本捆绑在一起。看见这些新类受项目的启发、定义和扩展。它们是对麻烦的旧类java.util.Date/.Calendar等的巨大改进

请注意,3-4个字母的代码(如
EDT
)既不是标准化的,也不是唯一的。尽可能避免它们。学习使用标准格式。time框架可能会尝试翻译,但许多常用代码都有重复的值

顺便说一下,请注意java.time在默认情况下是如何使用ISO 8601格式生成字符串的,但通过在括号中添加时区名称进行扩展的

String input = "Thu Jun 18 20:56:02 EDT 2009";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "EEE MMM d HH:mm:ss zzz yyyy" , Locale.ENGLISH );
ZonedDateTime zdt = formatter.parse ( input , ZonedDateTime :: from );
转储到控制台

System.out.println ( "zdt : " + zdt );
跑步的时候

zdt:2009-06-18T20:56:02-04:00[美国/纽约]

调整时区 为了好玩,让我们调整到印度时区

ZonedDateTime zdtKolkata = zdt.withZoneSameInstant ( ZoneId.of ( "Asia/Kolkata" ) );
zdtKolkata:2009-06-19T06:26:02+05:30[亚洲/加尔各答]

转换为j.u.Date 如果您确实需要java.util.Date对象用于尚未更新为java.time类型的类,请转换。请注意,您正在丢失指定的时区,但会自动调整到相同的时刻

针对: “如何将2016年9月13日星期二00:00:00 GMT-0500(墨西哥的维拉诺中心)转换为爪哇的dd-MM-yy?”,标记为如何重复

试试这个: 使用
java.util.Date
java.text.simpleDataFormat
,这是一个简单的解决方案

public static void main(String[] args) throws ParseException {

    String fecha = "Tue Sep 13 2016 00:00:00 GMT-0500 (Hora de verano central (México))";
    Date f = new Date(fecha);

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    sdf.setTimeZone(TimeZone.getTimeZone("-5GMT"));
    fecha = sdf.format(f);
    System.out.println(fecha);
}

有同样的问题。。。它在Java7上运行良好,但在Java6中将“Thu Jun…”解析为“EEE MMM…”时失败。有什么想法吗?eventuell新的SimpleDateFormat(“EEE-MMM-d-HH:mm:ss-zzz-yyyy”,Locale.ENGLISH);如果当前区域设置!=ENGLISH@jwl如何解析
Sun Dec 06 11:15:00 IST 2015
此日期如果
区域设置
更改,则无法在
4.4和5.1
设备上解析请注意,
SimpleDateFormat
在默认情况下或通过调用
setTimeZone
方法配置了
时区
。当且仅当要解析的字符串中未指明时区时,才会在解析期间使用该时区。对于使用Java 8解析/格式化日期,看看这个答案:@eddie how to parce
Sun Dec 06 11:15:00 IST 2015
date to
dd-mm-yy
如果区域设置发生变化怎么办?无法在4.4和5.1设备上解析如何parce
Sun Dec 06 11:15:00 IST 2015
日期格式到
dd-mm-YYYYY
我无法使用
SimpleDate格式进行解析(“EEE MMM dd HH:mm:ss z yyyy”,Locale.ENGLISH)
尝试使用bot
Z
Z
@SagarHudge使用
DateTimeFormatter
而不是
SimpleDateFormat
。请重新阅读我的答案。针对
4.4 eureka
Asus 5.1
的设备在应用程序语言更改为非英语语言(如
Marathi/Hindi
正常日期)时出现解析问题,可以SagarHudge的rse在
DateTimeFormatter
上指定
Locale
,以确定翻译中使用的人类语言和文化规范。
DateTimeFormatter
目标
26
4.4和5.1设备上出现问题