在java中将数字dMMyy转换为日期
我有来自数据库的日期作为类型号。 我必须将其转换为日期,比如如果我在db中有日期070311,那么当从db中提取时,我在java中得到70311。 0丢失,因为它是数字。 所以我把这个数字转换成字符串,然后格式化成日期,但不按要求给出07/03/11在java中将数字dMMyy转换为日期,java,date,Java,Date,我有来自数据库的日期作为类型号。 我必须将其转换为日期,比如如果我在db中有日期070311,那么当从db中提取时,我在java中得到70311。 0丢失,因为它是数字。 所以我把这个数字转换成字符串,然后格式化成日期,但不按要求给出07/03/11 String strDate = String.valueOf(70311); Date date = new SimpleDateFormat("ddMMyy").parse(str); 输出日期我收到的是9月8日星期六00:00:00 IST
String strDate = String.valueOf(70311);
Date date = new SimpleDateFormat("ddMMyy").parse(str);
输出日期我收到的是9月8日星期六00:00:00 IST 3
这是08/09/0003,但它应该是07/03/11 格式字符串中的
dd
表示有两位数字表示天数值。在字符串中,删除了前导的0
,因此日值现在仅为一位数字。因此,正确的格式字符串将是dMMyy
,这将为您提供正确的日期
更好的解决方案是确保不会丢失前导的0
,方法是不将日期视为整数,或者用前导的零预先填充数字
无论如何,这种情况下的快速解决方案是:
String strDate = "0" + String.valueOf(70311);
Date date = new SimpleDateFormat("ddMMyy").parse(strDate);
或
有关更多详细信息,请参阅文档
编辑 以正确格式获取字符串的更可靠方法(在左侧填充
0
s)是使用String.format
,如下所示:
String.format("%06d", num);
正如评论中指出的,这确保了仅在需要时添加0
:
String strDate = String.format("%06d", 70311);
Date date = new SimpleDateFormat("ddMMyy").parse(strDate);
格式字符串中的
dd
表示有两位数字表示天数的值。在字符串中,删除了前导的0
,因此日值现在仅为一位数字。因此,正确的格式字符串将是dMMyy
,这将为您提供正确的日期
更好的解决方案是确保不会丢失前导的0
,方法是不将日期视为整数,或者用前导的零预先填充数字
无论如何,这种情况下的快速解决方案是:
String strDate = "0" + String.valueOf(70311);
Date date = new SimpleDateFormat("ddMMyy").parse(strDate);
或
有关更多详细信息,请参阅文档
编辑 以正确格式获取字符串的更可靠方法(在左侧填充
0
s)是使用String.format
,如下所示:
String.format("%06d", num);
正如评论中指出的,这确保了仅在需要时添加0
:
String strDate = String.format("%06d", 70311);
Date date = new SimpleDateFormat("ddMMyy").parse(strDate);
这个类很好,但是使用了过时的类
LocalDate
阅读他的解释,但使用现代java.time类
该类表示一个仅限日期的值,不包含一天中的时间和时区
int inputNumber = 70311 ;
String inputModified = String.format( "%06d", inputNumber ) ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "ddMMuu" ) ;
LocalDate ld = LocalDate.parse( inputModified , f );
顺便说一下,这种将日期值压缩成整数的想法很糟糕。序列化日期时间数据时,请使用标准格式。日期为2011年3月7日的2011-03-07
。在生成和解析字符串时,java.time类默认使用这些格式。并始终使用4位数字,因为歧义和阅读困难不值得两位数字的间隔
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到java.time 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门针对Android采用了Three Ten Backport(如上所述)
- 看
LocalDate
阅读他的解释,但使用现代java.time类
该类表示一个仅限日期的值,不包含一天中的时间和时区
int inputNumber = 70311 ;
String inputModified = String.format( "%06d", inputNumber ) ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "ddMMuu" ) ;
LocalDate ld = LocalDate.parse( inputModified , f );
顺便说一下,这种将日期值压缩成整数的想法很糟糕。序列化日期时间数据时,请使用标准格式。日期为2011年3月7日的2011-03-07
。在生成和解析字符串时,java.time类默认使用这些格式。并始终使用4位数字,因为歧义和阅读困难不值得两位数字的间隔
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到java.time 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门针对Android采用了Three Ten Backport(如上所述)
- 看
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可能会在这里找到一些有用的类,例如、、和。在前面添加零是一个很好的解决方案,但我还建议检查字符串长度是否有6位数字。当你编写代码时,你应该处理所有的边缘情况。@deadfish我想这是对OP的注释吧?我同意最终的解决方案应该处理任何边缘情况,尽管对该代码的任何进一步改进都可能超出t