将简短的美国日期解析为yyyy-MM-dd,java

我想解析日期“3/27/11”,我认为这个日期等于美国的短日期。

DateFormat df1 = new SimpleDateFormat("MM/dd/yy"); DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd"); Date date = (Date) df1.parseObject("03/27/11"); System.out.println("New date: " + df2.format(date)); 

我在几个java教程中找到了上面的代码,但似乎没有用。 对于我的一些方式,

 Exception in thread "main" java.lang.AssertionError: Default directory must be absolute/non-UNC 

这是我想要实现的目标,

输入:3/27/11
(03/27/11也应该是一个有效的输入)
输出:2011-03-27

提前致谢!

当我运行它打印

 New date: 2011-03-27 

我怀疑你的问题与此无关,而是你的应用程序的默认目录是UNC路径。 即确切地说您的错误消息。

尝试从C:驱动器或使用网络驱动器号的路径运行此程序。

 public class date { public static void main(String args[]) { String s="03/27/2011";// or 3/27/2011 SimpleDateFormat dateFormatter=s.length()==9?new SimpleDateFormat("M/dd/yyyy"):new SimpleDateFormat("MM/dd/yyyy"); try { Calendar calendar=Calendar.getInstance(); Date date=dateFormatter.parse(s); calendar.setTime(date); SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); String str=simpleDateFormat.format(calendar.getTime()); System.out.println(str); } catch (ParseException e) { e.printStackTrace(); } } } enter code here 

你也可以这样做

 String DATE_FORMAT_NOW = "dd-MM-yyyy HH:mm:ss"; //Instance of the calender class in the utill package Calendar cal = Calendar.getInstance(); //A class that was used to get the date time stamp SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); 

打印出你说的时间

 System.out.println(sdf.format(cal.getTime()) ); 

干杯

我正在让AssertionError抱怨绝对路径,并通过纯粹的暴力找到了解决方法。 我想我会在这里发布我的结果,希望有人在寻找这个问题的答案时不必浪费那么多的时间来修复它。

问题似乎是Oracle的Java VM版本中的一个错误。 如果您是第一次在非静态对象中创建java.util.Calendar对象(直接或间接),则会发生此错误。 要防止它,只需在main()方法中实例化一个Calendar对象,该对象是静态的。 在此之后,后续的非静态实例化将正常工作,至少在我的情况下如此。 用简单的东西开始main()

 System.out.println(java.util.Calendar.getInstance().getTime()); 

会做的伎俩。

希望能帮助别人。