在java中将日历date设置为yyyy-MM-dd格式

如何将日历date转换为yyyy-MM-dd格式。

 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 1); Date date = cal.getTime(); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); String date1 = format1.format(date); Date inActiveDate = null; try { inActiveDate = format1.parse(date1); } catch (ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 

这将产生inActiveDate = Wed Sep 26 00:00:00 IST 2012 。 但是我需要的是2012-09-26 。 我的目的是比较这个date与我的数据库中的另一个date使用Hibernate条件。 所以我需要yyyy-MM-dd格式的date对象。

Java Date是自1970年1月1日00:00:00 GMT以来的毫秒数的容器。

当使用类似System.out.println(date)东西时,Java使用Date.toString()来打印内容。

改变它的唯一方法是重写Date并提供你自己的Date.toString()的实现。 现在,在启动IDE之前,尝试一下,我不会; 这只会使问题复杂化。 您最好将date格式化为您要使用的格式(或显示)。

你可以做的是格式化date。

 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 1); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(cal.getTime()); // Output "Wed Sep 26 14:23:28 EST 2012" String formatted = format1.format(cal.getTime()); System.out.println(formatted); // Output "2012-09-26" System.out.println(format1.parse(formatted)); // Output "Wed Sep 26 00:00:00 EST 2012" 

这些实际上是相同的date,代表不同。

你的代码是错误的。 没有parsingdate的点,并保持为Date对象。

您可以格式化日历日历对象,当你想显示并保持作为一个string。

 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 1); Date date = cal.getTime(); SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); String inActiveDate = null; try { inActiveDate = format1.format(date); System.out.println(inActiveDate ); } catch (ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 

java.time

MadProgrammer的答案是正确的,尤其是关于Joda-Time的提示。 Joda-Time的后继者现在已经被构build到Java 8中作为新的java.time包 。 这里是Java 8中的示例代码。

在使用date时间(而不是当地date)时, 时区处于危急状态。 date取决于时区。 例如, 印度时区是+05:30 (比UTC早五个半小时),而法国只有一个小时。 所以在印度新的一天有一个date,而在法国同一时间有“昨天”的date。 创build缺less任何时区或偏移量信息的string输出会产生歧义。 你要求YYYY-MM-DD的输出,所以我提供了,但我不推荐它。 而不是ISO_LOCAL_DATE我会用ISO_DATE来获得这个输出: 2014-02-25+05:30

 ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ); ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId ); DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity. String output = formatterOutput.format( zonedDateTime ); 

转储到控制台…

 System.out.println( "zonedDateTime: " + zonedDateTime ); System.out.println( "output: " + output ); 

当运行…

 zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata] output: 2014-02-25 

乔达时间

使用Joda-Time库的类似代码,java.time的前身。

 DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" ); DateTime dateTime = DateTime.now( zone ); DateTimeFormatter formatter = ISODateTimeFormat.date(); String output = formatter.print( dateTime ); 

ISO 8601

顺便提一下,inputstring的格式是标准格式,是由ISO 8601定义的几种方便的date时间string格式之一。

在分析和生成各种date时间值的string表示时,Joda-Time和java.time默认使用ISO 8601格式。

java.util.Date对象不能以自定义格式表示date ,而是必须使用返回string SimpleDateFormat.format方法。

 String myString=format1.format(date); 

为了parsingjava.util.Date对象,必须先使用自己的格式将其转换为String。

 inActiveDate = format1.parse( format1.format(date) ); 

但我相信你在这里是多余的。

 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 7); Date date = c.getTime(); SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY"); JOptionPane.showMessageDialog(null, ft.format(date)); 

这将在JOption窗格中以月,日和年格式显示date+ 7天。

我发现这个代码的date是比较的格式来比较数据库中的date字段…可能是这可能对你有帮助…

当您使用simpledateformat将string转换为date时,很难与mysql数据库中的Date字段进行比较。

因此,以这种格式使用select STR_to_DATE('yourdate','%m /%d /%Y') – >格式转换javastringdate,那么您将获得mysqldate字段的确切date格式。

http://javainfinite.com/java/java-convert-string-to-date-and-compare/

 public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(year, month, date); SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd"); String formatted = format1.format(cal.getTime()); System.out.println(formatted); } 
Interesting Posts