Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 - Fatal编程技术网

在java中,格式化字符串到日期的转换不改变格式

在java中,格式化字符串到日期的转换不改变格式,java,Java,我已经格式化了字符串形式的日期,我希望它在日期格式,而不改变格式化模式 这是我的密码 Date currDate = new Date();//Fri Oct 31 03:48:24 PDT 2014 String pattern = "yyyy-MM-dd hh:mm:ss"; SimpleDateFormat formatter; formatter = new SimpleDateFormat(pattern); String formattedDate=

我已经格式化了字符串形式的日期,我希望它在日期格式,而不改变格式化模式

这是我的密码

Date currDate = new Date();//Fri Oct 31 03:48:24 PDT 2014

    String pattern = "yyyy-MM-dd hh:mm:ss";
    SimpleDateFormat formatter;
    formatter = new SimpleDateFormat(pattern);
    String formattedDate= formatter.format(currDate);//2014-10-31 04:23:42
这里我得到的是yyyy-MM-dd hh:MM:ss格式,和我想要的日期格式相同

 SimpleDateFormat sdf = new SimpleDateFormat(pattern);
 Date paidDate = sdf.parse(formattedDate);

System.out.println(pattern + " " + paidDate);//Fri Oct 31 03:48:24 PDT 2014

但我得到的结果是2014年10月31日星期五03:48:24,因此,如果我正确理解您的问题,请帮助我以日期格式获得2014-10-31 04:23:42的结果:

System.out.println(pattern + " " + sdf.format(paidDate);

如果我正确理解了您的问题:

System.out.println(pattern + " " + sdf.format(paidDate);
试试这个

System.out.printlnformatter.formatpaidDate

试试这个


System.out.printlnformatter.formatpaidDate

您似乎误以为日期对象以某种方式编码了原始日期的格式。没有

所以。。。执行此操作时:

Date paidDate = sdf.parse(formattedDate);

它不记得paidDate中日期文本形式的原始格式。但它不能。如果要以默认格式以外的任何格式打印/取消分析日期,应使用DateFormat并调用其format方法。调用toString只会以默认格式为您提供日期。

您似乎错误地认为日期对象以某种方式编码了原始日期的格式。没有

所以。。。执行此操作时:

Date paidDate = sdf.parse(formattedDate);
它不记得paidDate中日期文本形式的原始格式。但它不能。如果要以默认格式以外的任何格式打印/取消分析日期,应使用DateFormat并调用其format方法。调用toString只会以默认格式为您提供日期。

tl;博士 不要将日期时间对象与表示其值的字符串合并。日期时间对象没有“格式”

ZonedDateTime.now(                                         // Instantiate a `ZonedDateTime` object capturing the current moment.
    ZoneId.of( "Africa/Tunis" )                            // Assign this time zone through which we see the wall-clock time used by the people of this particular region.
).format(                                                  // Generate a string representing the value of this `ZonedDateTime` object.
    DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" )   // Define a formatting pattern to match your desire.
)
2018-03-10 07:36:23

调用ZonedDateTime::toString将生成标准ISO 8601格式的字符串

2018-03-10T07:36:23.595362+01:00[非洲/突尼斯]

日期时间对象没有“格式” 您将Java中的日期时间对象或数据库中存储的日期时间值与文本表示混淆。您可以从日期时间对象或数据库值生成字符串,但该字符串与它所表示的值是分开的。不要将字符串与其生成创建者合并

java.time 避免使用麻烦的旧日期时间类,如date、Calendar和SimpleDateFormat。相反,请分别使用Instant、ZonedDateTime和DateTimeFormatter类

如果你有一个输入字符串,如2014-10-31 04:23:42,用T替换中间的空间,以符合ISO 8601标准格式。在解析/生成字符串时,java.time类默认使用ISO 8601格式

String input = "2014-10-31 04:23:42".replace( " " , "T" ) ;
该输入缺少时区或UTC偏移的任何指示器。因此,解析为LocalDateTime,故意缺少任何区域/偏移量的概念

LocalDateTime ldt = LocalDateTime.parse( input ) ;
ldt.toString:2014-10-31T04:23:42

LocalDateTime不代表一个时刻,不是时间线上的一个点。要确定实际力矩,必须提供分区或偏移的上下文

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;  // Now we have an actual moment, a point on the timeline.
要捕获UTC中的当前时刻,请使用Instant

调整到另一个区域

ZonedDateTime zdt = instant.atZone( z ) ;
zdt.toString:2018-03-10T07:36:23.595362+01:00[非洲/突尼斯]

我不建议生成缺少区域/偏移指示器的字符串。但是如果你坚持,使用内置的DateTimeFormatter,然后在中间用一个空间替换T来得到你想要的格式。
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " ) ;
2018-03-10 07:36:23.595362

如果你真的不想要分数秒,那么定义你自己的格式模式

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ; 
String output = zdt.format( f ) ;
2018-03-10 07:36:23

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

该项目现已启动,建议迁移到类

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

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*类

从哪里获得java.time类

,及以后 内置的。 标准JavaAPI的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大部分java.time功能都在中向后移植到Java6和Java7。 更高版本的Android捆绑包实现了java.time类。 对于早期的Android tl;博士 不要将日期时间对象与表示其值的字符串合并。日期时间对象没有“格式”

ZonedDateTime.now(                                         // Instantiate a `ZonedDateTime` object capturing the current moment.
    ZoneId.of( "Africa/Tunis" )                            // Assign this time zone through which we see the wall-clock time used by the people of this particular region.
).format(                                                  // Generate a string representing the value of this `ZonedDateTime` object.
    DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" )   // Define a formatting pattern to match your desire.
)
2018-03-10 07:36:23

调用ZonedDateTime::toString将生成标准ISO 8601格式的字符串

2018-03-10T07:36:23.595362+01:00[非洲/突尼斯]

日期时间对象没有“格式” 您将Java中的日期时间对象或数据库中存储的日期时间值与文本表示混淆。您可以从日期时间对象或数据库值生成字符串,但该字符串与它所表示的值是分开的。不要混为一谈 具有其生成创建者的字符串

java.time 避免使用麻烦的旧日期时间类,如date、Calendar和SimpleDateFormat。相反,请分别使用Instant、ZonedDateTime和DateTimeFormatter类

如果你有一个输入字符串,如2014-10-31 04:23:42,用T替换中间的空间,以符合ISO 8601标准格式。在解析/生成字符串时,java.time类默认使用ISO 8601格式

String input = "2014-10-31 04:23:42".replace( " " , "T" ) ;
该输入缺少时区或UTC偏移的任何指示器。因此,解析为LocalDateTime,故意缺少任何区域/偏移量的概念

LocalDateTime ldt = LocalDateTime.parse( input ) ;
ldt.toString:2014-10-31T04:23:42

LocalDateTime不代表一个时刻,不是时间线上的一个点。要确定实际力矩,必须提供分区或偏移的上下文

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;  // Now we have an actual moment, a point on the timeline.
要捕获UTC中的当前时刻,请使用Instant

调整到另一个区域

ZonedDateTime zdt = instant.atZone( z ) ;
zdt.toString:2018-03-10T07:36:23.595362+01:00[非洲/突尼斯]

我不建议生成缺少区域/偏移指示器的字符串。但是如果你坚持,使用内置的DateTimeFormatter,然后在中间用一个空间替换T来得到你想要的格式。
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " ) ;
2018-03-10 07:36:23.595362

如果你真的不想要分数秒,那么定义你自己的格式模式

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ; 
String output = zdt.format( f ) ;
2018-03-10 07:36:23

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

该项目现已启动,建议迁移到类

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

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*类

从哪里获得java.time类

,及以后 内置的。 标准JavaAPI的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大部分java.time功能都在中向后移植到Java6和Java7。 更高版本的Android捆绑包实现了java.time类。
对于早期的Android,为什么不在System.out.println语句中使用formatter.formatcurrDate?根据需要更改pc的默认日期格式,然后更改System.out.printlnnew DateFYI,像、和java.text.SimpleDateFormat这样麻烦的旧日期时间类现在被java 8和java 9中内置的类所取代。请参阅。为什么不在System.out.println语句中使用formatter.formatcurrDate?更改您电脑的默认日期格式,然后更改System.out.printlnnew DateFYI,像、和java.text.SimpleDateFormat这样麻烦的旧日期时间类现在被java 8和java 9中内置的类所取代。看,但它给了你一个字符串,我想要它在date中,但你打印的字符串表示日期,而不是日期对象那个日期我必须以日期格式存储在数据库中,但它给了你一个字符串,我想要它在date中,但你打印的字符串表示日期,而不是日期对象那个日期我必须以日期格式存储在数据库中