我想更改日期类型对象的格式而不转换为字符串类型。
目前我正在获取日期对象,然后再次将格式转换为日期对象后更改格式,但格式会更改。
这是我的代码
Date dateOld = issuebean.getCusDtl().getDob();
System.out.println(dateOld);
输出1:1955-01-24 00:00:00.0
之后我改变了格式
SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy");
String format1 = formatter.format(dateOld);
System.out.println(format1);
output2:24-01-1955
之后我将其解析为日期对象
Date format2 = formatter.parse(format1);
System.out.println(format2);
但现在输出输出3:Mon 1月24日00:00:00 IST 1955
我想在日期对象format2中使用output2,因为我需要在我的类中设置日期对象。
答案 0 :(得分:1)
DateFormat
是工具,可将Date
转换为String
(方法format
)或 String
到Date
(方法parse
)。阅读javadoc以获取更多信息
使用Date
打印System.out.println
时,使用toString()
Date
方法进行转换Date
> String
,如果您不想这样,您必须自己进行转换,使用DateFormat#format()
调用(例如)
答案 1 :(得分:0)
output1的格式表明您未正确使用java.sql.Timestamp作为java.util.Date。
以下是一些示例代码作为证据。
java.sql.Timestamp sqlTimestamp = java.sql.Timestamp.valueOf ( "2015-01-23 00:00:00" );
java.util.Date improperUtilDate = sqlTimestamp; // Do NOT do this. Docs warn against using this inheritance relationship.
java.util.Date properUtilDate = new java.util.Date ();
System.out.println ( "sqlTimestamp: " + sqlTimestamp + " | improperUtilDate: " + improperUtilDate + " | properUtilDate: " + properUtilDate );
sqlTimestamp:2015-01-23 00:00:00.0 | improperUtilDate:2015-01-23 00:00:00.0 | properUtilDate:Sun Dec 13 12:27:22 PST 2015
虽然技术上java.sql.Timestamp是java.util.Date的子类,但文档告诉您忽略该事实并将它们视为独立的。这个类设计是一个黑客,是在早年将Java推向市场的过程中做出的一个不幸的选择。
RC的Answer。是正确的。日期时间对象没有“格式”。您似乎将日期时间对象与该值的生成的String表示形式混淆。
您可以解析String以获取日期时间对象。并且日期时间对象可用于生成表示日期时间值的String。日期时间对象和字符串始终是单独的不相关对象。
Java 8及更高版本中内置的java.time框架取代了棘手的旧java.util.Date/.Calendar类。新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计。由JSR 310定义。由ThreeTen-Extra项目扩展。请参阅Tutorial。
仅使用java.sql。*类(java.sql.Timestamp,java.sql.Date等)来获取数据库的日期。然后尽快转换为java.time。最终JDBC驱动程序将更新为直接使用java.time类型。但直到那天我们必须转换。
java.sql.Timestamp sqlTimestamp = java.sql.Timestamp.valueOf ( "2015-01-23 00:00:00" );
Instant instant = sqlTimestamp.toInstant ();
从那里你只想要日期,没有时间。要确定日期,我们需要应用时区。日期仅在特定时区内具有意义。例如,新的一天在巴黎早些时候比在蒙特利尔,甚至更早在加尔各答开始。
ZoneId zoneId = ZoneId.of ( "Asia/Kolkata" ); // For UTC, use the constant ZoneOffset.UTC.
应用该时区以获得ZonedDateTime
。从那里我们可以提取一个仅限日期的对象,LocalDate
。
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
LocalDate localDate = zdt.toLocalDate ();
现在找到或定义一个格式化程序来指导生成LocalDate
对象值的String表示。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "dd-MM-yyyy" ); // Or better yet, let java.time determine a localized format.
String output = localDate.format ( formatter );
转储到控制台。
System.out.println ( "sqlTimestamp: " + sqlTimestamp + " = instant: " + instant + " in zoneId: " + zoneId + " is zdt: " + zdt + " with localDate: " + localDate + " as output: " + output );
sqlTimestamp:2015-01-23 00:00:00.0 =即时:2015-01-23T08:00:00Z在zoneId:Asia / Kolkata是zdt:2015-01-23T13:30 + 05:30 [亚洲/加尔各答]与localDate:2015-01-23作为输出:23-01-2015