在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); }