将数字dMMyy转换为java中的日期

时间:2016-10-15 07:53:19

标签: java date

我的日期来自数据库,类型为Number。 我必须将它转换为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 3 这是08/09/0003,但它假设像07/03/11。

2 个答案:

答案 0 :(得分:3)

格式字符串中的dd表示有两个数字代表天数。在您的字符串中,您删除了前导0,因此日值现在只有一位数。因此,正确的格式字符串将为dMMyy,这将为您提供正确的日期。

更好的解决方案是确保您不会丢失前导0,但不要将日期视为整数,或者使用前导零填充数字。

无论如何,在这种情况下的快速解决方案是:

String strDate = "0" + String.valueOf(70311);
Date date = new SimpleDateFormat("ddMMyy").parse(strDate);

String strDate = String.valueOf(70311);
Date date = new SimpleDateFormat("dMMyy").parse(strDate);

有关详细信息,请参阅SimpleDateFormat文档。

修改

以正确格式获取字符串的更可靠方法(在左侧填充0)是使用String.format,如下所示:

String.format("%06d", num);

正如评论中所指出的,这可确保仅在需要时添加0

String strDate = String.format("%06d", 70311);
Date date = new SimpleDateFormat("ddMMyy").parse(strDate);

答案 1 :(得分:1)

Answer by nbrooks很好,但使用的是过时的类。

LocalDate

阅读他的解释,但使用现代的java.time类。

LocalDate类表示没有时间且没有时区的仅限日期的值。

int inputNumber = 70311 ;
String inputModified = String.format( "%06d", inputNumber ) ;

DateTimeFormatter f = DateTimeFormatter.ofPattern( "ddMMuu" ) ;
LocalDate ld = LocalDate.parse( inputModified , f );

顺便说一下,将日期值压缩为整数的想法是可怕的。序列化日期时间数据时,请使用标准ISO 8601格式。对于2011年3月7日的日期,这将是2011-03-07。生成和解析字符串时,默认情况下会在java.time类中使用这些格式。并且总是使用4位数字,因为阅读的模糊性和难度不值得以两位数保存的间距。

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore