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

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

如何正确格式化java时间

如何正确格式化java时间,java,date,Java,Date,下面是我的时间格式化代码 public class FormatTime { public static void main(String[] args) throws Exception { FormatTime ft = new FormatTime(); System.out.println(ft.evaluate("12/01/2014 05:30:15 PM","MM/dd/yyyy hh:mm:ss aa", "yyyy-MM-dd HH:m

下面是我的时间格式化代码

public class FormatTime { public static void main(String[] args) throws Exception { FormatTime ft = new FormatTime(); System.out.println(ft.evaluate("12/01/2014 05:30:15 PM","MM/dd/yyyy hh:mm:ss aa", "yyyy-MM-dd HH:mm:ss")); } public String evaluate(String time,String iFormat ,String f) throws ParseException { SimpleDateFormat format = new SimpleDateFormat(f); SimpleDateFormat inFormat = new SimpleDateFormat(iFormat); Date date=inFormat.parse(time); String fechaNueva = format.format(date); return fechaNueva; } } 公共类格式化时间{ 公共静态void main(字符串[]args)引发异常{ FormatTime ft=新的FormatTime(); 系统输出打印LN(ft.evaluate(“2014年1月12日05:30:15下午”,“年/月/日hh:MM:ss aa”,“年/月/日hh:MM:ss”); } 公共字符串求值(字符串时间、字符串格式、字符串f)引发ParseException{ SimpleDataFormat格式=新的SimpleDataFormat(f); SimpleDataFormat inFormat=新的SimpleDataFormat(iFormat); 日期=信息解析(时间); 字符串fechaNueva=format.format(日期); 返回费切努埃瓦; } } 该项目的产出与预期一致,为2014-12-01 17:30:15。
但当我将iFormat中的hh替换为hh时(与outputformat中的相同),它将以12 out格式输出2014-12-01 05:30:15

同样的情况也会发生,如果我将两者转换为小写形式,即hh。为什么会出现这种不一致性?

我不认为这是不一致的。使用
HH
计算时间时,它将忽略
aa
位,因为它将输入计算为24小时时间,
aa
位没有意义。但是,当您使用
hh
运行它时,它会将
05:30:15 PM
读为“下午五点半”,并将其写入
2014-12-01 17:30:15
。阅读
05:30:15 PM
作为一个24小时的时间,会读为“早上五点半”,把
PM
的部分扔掉

当两种格式都使用
hh
时,您的阅读和书写都是12小时格式。为了使at有意义,您还需要将
aa
位添加到输出格式中

我希望以一种有意义的方式回答你的问题:)

tl;博士 java.time 现代方法使用java.time类取代了麻烦的旧日期时间类

以UTC为单位获取当前时刻。该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)

要通过某个地区(时区)的人使用的挂钟时间来查看同一时刻,请应用
ZoneId
获取
zoneDateTime

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

要在其中任何一个上生成标准ISO 8601格式的字符串,请调用
toString
。在配对/生成字符串时,java.time类默认使用标准格式。因此,无需指定格式化模式

如果需要其他格式,请使用
DateTimeFormatter
DateTimeFormatterBuilder
类。您可以指定格式模式,但更容易让java.time自动本地化

要本地化,请指定:

  • 确定字符串的长度或缩写
  • 确定(a)用于翻译日名、月名等的人类语言,以及(b)决定缩写、大写、标点符号、分隔符等问题的文化规范
例如:

Locale l = Locale.FRENCH ; 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( l );
String output = zdt.format( f );
mercredi 14 février 2018á00:59:07欧洲中央师范大学

或者,
Locale.US
&
FormatStyle.SHORT

2018年2月14日凌晨1:01

您输入的自定义格式为:

String input = "12/01/2014 05:30:15 PM" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu hh:mm:ss a" , Locale.US ) ;
该输入字符串缺少时区或UTC偏移量的任何指示器。因此,这不是一个时刻,也不是时间线上的一个特定点。它代表了一个关于26-27小时范围内潜在时刻的模糊概念。因此,我们将此输入解析为一个
LocalDateTime
,其中没有任何区域/偏移的概念

LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
ldt.toString():2014-12-01T17:30:15

生成该格式的字符串

String output = ldt.format( f ) ;
2014年1月12日下午5:30:15

正如其他人所解释的,格式化代码区分大小写。如果需要24小时制,请使用大写字母
H
。对于12小时的时间,请使用小写字母
h

请注意,java.time中的格式代码与传统的
SimpleDataFormat
中的格式代码相近,但并不完全相同。研究文档和搜索堆栈溢出的许多例子

当以文本形式交换日期时间值时,请坚持使用标准格式


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

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

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

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

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看

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

如果你在iFormat中用hh替换hh,那么05:30:15的时间被解读为24小时时钟,而PM被忽略…@agarwal_achhnera确实帮了你我不确定为什么这个问题被否决。或许选民可以解释他/她的理由??当然,代码中有一个错误,但这就是stackoverflow问题的本质。错误
String input = "12/01/2014 05:30:15 PM" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu hh:mm:ss a" , Locale.US ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
String output = ldt.format( f ) ;