try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
Date d = sdf.parse("1994-10-17");
System.out.println(d);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
为什么我打印出来的结果是:
Mon Sep 07 00:10:00 CST 1998
我想要的结果是:
1994-10-17

解决方案 »

  1.   

    不是parse方法,是format方法~!
      

  2.   


    try {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
    Date d = sdf.parse("1994年10月17日");   //此处只是将字符串转成日期格式了,你在打印d就是调用d的toString方法了,出来的自然是系统日期
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
    //SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日");第二种格式化
    String date = sdf1.format(d);
    System.out.println(date);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      

  3.   

    应该没有比API文档更权威的了,public class Dateextends Objectimplements Serializable, Cloneable, Comparable<Date>类 Date 表示特定的瞬间,精确到毫秒。 在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。 尽管 Date 类打算反映协调世界时 (UTC),但无法做到如此准确,这取决于 Java 虚拟机的主机环境。当前几乎所有操作系统都假定 1 天 = 24 × 60 × 60 = 86400 秒。但对于 UTC,大约每一两年出现一次额外的一秒,称为“闰秒”。闰秒始终作为当天的最后一秒增加,并且始终在 12 月 31 日或 6 月 30 日增加。例如,1995 年的最后一分钟是 61 秒,因为增加了闰秒。大多数计算机时钟不是特别的准确,因此不能反映闰秒的差别。 一些计算机标准是按照格林威治标准时 (GMT) 定义的,格林威治标准时和世界时 (UT) 是相等的。GMT 是标准的“民间”名称;UT 是相同标准的“科学”名称。UTC 和 UT 的区别是:UTC 是基于原子时钟的,UT 是基于天体观察的,两者在实际应用中难分轩轾。因为地球的旋转不是均匀的(它以复杂的方式减速和加速),所以 UT 始终不是均匀地流过。闰秒是根据需要引入 UTC 的,以便把 UTC 保持在 UT1 的 0.9 秒之内,UT1 是应用了某些更正的 UT 版本。还有其他的时间和日期系统;例如,基于卫星的全球定位系统 (GPS) 使用的时间刻度与 UTC 同步,但没有 针对闰秒进行调整。有关更多信息的一个有趣来源是美国海军天文台,特别是 Directorate of Time 的网址:      http://tycho.usno.navy.mil
     还有它们对 "Systems of Time" 的定义,网址为:      http://tycho.usno.navy.mil/systime.html
     在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式: 年份 y 由整数 y - 1900 表示。 
    月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。 
    日期(一月中的某天)按通常方式由整数 1 至 31 表示。 
    小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。 
    分钟按通常方式由 0 至 59 的整数表示。 
    秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。 
    在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为 1 月 32 日,并把它解释为 2 月 1 日的相同含义。 从以下版本开始: 
    JDK1.0 
    另请参见:
    DateFormat, Calendar, TimeZone, 序列化表格--------------------------------------------------------------------------------构造方法摘要 
    Date() 
              分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。 
    Date(int year, int month, int date) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date) 或 GregorianCalendar(year + 1900, month, date) 取代。 
    Date(int year, int month, int date, int hrs, int min) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min) 或 GregorianCalendar(year + 1900, month, date, hrs, min) 取代。 
    Date(int year, int month, int date, int hrs, int min, int sec) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代。 
    Date(long date) 
              分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。 
    Date(String s) 
              已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。 
      方法摘要 
     boolean after(Date when) 
              测试此日期是否在指定日期之后。 
     boolean before(Date when) 
              测试此日期是否在指定日期之前。 
     Object clone() 
              返回此对象的副本。 
     int compareTo(Date anotherDate) 
              比较两个日期的顺序。 
     boolean equals(Object obj) 
              比较两个日期的相等性。 
     int getDate() 
              已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。 
     int getDay() 
              已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。 
     int getHours() 
              已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。 
     int getMinutes() 
              已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。 
     int getMonth() 
              已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。 
     int getSeconds() 
              已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。 
     long getTime() 
              返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 
     int getTimezoneOffset() 
              已过时。 从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000) 取代。 
     int getYear() 
              已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。 
     int hashCode() 
              返回此对象的哈希码值。 
    static long parse(String s) 
              已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。 
     void setDate(int date) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.DAY_OF_MONTH, int date) 取代。 
     void setHours(int hours) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.HOUR_OF_DAY, int hours) 取代。 
     void setMinutes(int minutes) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MINUTE, int minutes) 取代。 
     void setMonth(int month) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MONTH, int month) 取代。 
     void setSeconds(int seconds) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.SECOND, int seconds) 取代。 
     void setTime(long time) 
              设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。 
     void setYear(int year) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.YEAR, year + 1900) 取代。 
     String toGMTString() 
              已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代,使用 GMT TimeZone。 
     String toLocaleString() 
              已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代。 
     String toString() 
              把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 
    static long UTC(int year, int month, int date, int hrs, int min, int sec) 
              已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代,使用 UTC TimeZone,后跟 Calendar.getTime().getTime()。 
      
      

  4.   

    因为你System.out.println(d);,就相当于System.out.println(d.toString());
    而java.util.Date的toString()方法就是那样写的,见API:
    public String toString()
    Converts this Date object to a String of the form:
     dow mon dd hh:mm:ss zzz yyyy
    想打印你需要的格式的方法就如2楼所说的。
      

  5.   

    new SimpleDateFormat("yyyy-MM-dd").format(new Date());
      

  6.   

    因为你使用的是默认的输出。
    System.out.println(d.toLocaleString);这样就可以了。
      

  7.   

    不好意思,少了个括号。
    System.out.println(d.toLocaleString());
      

  8.   

    yyyy-mm-dd 改为 yyyy-MM-dd小写的 mm 表示的是“分钟”
      

  9.   

    java中    yyyy-MM-dd HH:mm:ss
    oracle中 yyyy-mm-dd hh24:mi:ss  
      

  10.   

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12