Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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中将字符串dd/MM/yyyy转换为日期dd/MM/yyyy_Java_Date Format_Simpledateformat - Fatal编程技术网

无法在java中将字符串dd/MM/yyyy转换为日期dd/MM/yyyy

无法在java中将字符串dd/MM/yyyy转换为日期dd/MM/yyyy,java,date-format,simpledateformat,Java,Date Format,Simpledateformat,我有一个格式为dd/MM/yyyy的输入字符串,我需要将其转换为日期dd/MM/yyyy 我的做法是: SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); String date = formatter.format(formatter.parse("22/09/2016")); Date convertedDate = formatter.parse(date); 我希望2016年9月22日作为日期对象,但是返回的

我有一个格式为dd/MM/yyyy的输入字符串,我需要将其转换为日期dd/MM/yyyy

我的做法是:

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String date = formatter.format(formatter.parse("22/09/2016"));
Date convertedDate = formatter.parse(date);
我希望2016年9月22日作为日期对象,但是返回的格式与预期不符。O/P=>2016年9月12日星期一00:00:00 IST


知道我哪里出错了吗?提前谢谢

您似乎假设java.util.Date知道一种格式。没有。这不是它状态的一部分——它只是Unix时代以来的毫秒数。也没有时区——你在那里看到的是你的本地时区;这只是Date.toString的一部分功能

 try {
            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            Date d = formatter.parse("22/09/2016");
            System.out.println(d.toString());
            String e = formatter.format(d);
            System.out.println(e);
        } catch (ParseException ex) {
            Logger.getLogger(Json.class.getName()).log(Level.SEVERE, null, ex);
        }
基本上,日期只是时间上的一个瞬间——当您需要一个特定的格式化值时,就是使用SimpleDataFormat的时候

或者更好,使用java.time.*

把它想象成一个数字——不管你用二进制表示10000,十进制表示16,或十六进制表示0x10,数字十六都是相同的数字。int值没有任何关于我是二进制整数或十六进制整数的概念——只有当您将其转换为字符串时,才需要考虑格式。日期/时间类型也是如此。

打印日期时将调用对象的toString方法。然后它将选择它想要的任何格式

试一试

或者-显然

System.out.println(date);
tl;博士 问题 您正在将日期时间对象与表示日期时间值的字符串合并。日期时间对象可以解析字符串,也可以生成字符串,但日期时间对象始终与字符串分开。字符串有一个格式;日期时间对象不存在。 您使用的是麻烦的旧日期时间类,现在已被java.time类取代。 您正试图将一个仅限日期的值放入日期时间对象中,即方形钉、圆孔。 您正被设计糟糕的toString方法所欺骗,该方法将时区静默地应用于没有时区的内部值UTC。 一定要阅读

java.time 使用新的java.time类,特别是LocalDate。该类表示一个仅限日期的值,不包含一天中的时间和时区

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/yyyy" );
LocalDate ld = LocalDate.parse( "22/09/2016" , f );
通过调用toString生成一个字符串,以标准格式表示该值

通过应用格式化程序生成所需格式的字符串

String output = ld.format( f );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到java.time

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释

大部分java.time功能都在中向后移植到java 6和7,并进一步调整为在中


该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。

我认为您将事情复杂化了。从你的角度来看,你应该更好地描述出问题所在。因为formatter.parse22/09/2016已经实现了您想要的功能,所以我希望2016年9月22日作为日期对象。@Takarii我没有使用joda Library它仍然返回字符串,不是吗?我需要一个日期对象。@robot\u外星人是的,你可以使用'd'对象。它是日期类型的
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/yyyy" );
LocalDate ld = LocalDate.parse( "22/09/2016" , f );
String output = ld.toString(); // 2016-09-22
String output = ld.format( f );