1

我的输入字符串为 2012-07-27,我希望输出为日期,但格式与 2012-07-27 相同

我的代码是

DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    try {
        Date today = df.parse("20-12-2005");
        System.out.println("Today = " + df.format(today));

                 } catch (ParseException e) {
        e.printStackTrace();
    }

我的输出是

Fri Jul 27 00:00:00 IST 2012

但我想返回日期对象,如 2012-07-26 23:59:59 而不是字符串,请提供任何帮助

任何帮助都非常感谢

4

7 回答 7

7

您可以使用与SimpleDateFormat解析日期相同的方法将日期格式化为字符串。

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = formatter.parse("2012-07-27");
System.out.println(date1); // prints Fri Jul 27 00:00:00 IST 2012
System.out.println(formatter.format(date1)); // prints 2012-07-26
于 2012-09-06T13:01:03.220 回答
1

首先,我认为重要的是要注意System.out.println隐式调用toString其参数的方法。参数必须是它的一个Object或一个子类。并且Date是 的子类Object。话虽如此,看看 1.7 的Date#toString实现,

public String toString() {
        // "EEE MMM dd HH:mm:ss zzz yyyy";
        BaseCalendar.Date date = normalize();
        StringBuilder sb = new StringBuilder(28);
        int index = date.getDayOfWeek();
        if (index == gcal.SUNDAY) {
            index = 8;
        }
        convertToAbbr(sb, wtb[index]).append(' ');                        // EEE
        convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' ');  // MMM
        CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd

        CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':');   // HH
        CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
        CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
        TimeZone zi = date.getZone();
        if (zi != null) {
            sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
        } else {
            sb.append("GMT");
        }
        sb.append(' ').append(date.getYear());  // yyyy
        return sb.toString();
    }

对象的字符串表示形式Date指定为EEE MMM dd HH:mm:ss zzz yyyy。这正是您所看到的。

如果您想以Date不同的格式显示对象,请使用SimpleDateFormat该类。Date它的唯一目的是为对象表示为字符串的方式增加灵活性。


还有...

一种可能但荒谬的解决方法是创建自己的包装类,

public class MyDate{
    private final Date d;
    private final SimpleDateFormat sdf;

    public(Date d, SimpleDateFormat sdf){
        this.d = d;
        this.sdf = sdf;
    }

    // not recommended...should only be used for debugging purposes
    @Override
    public String toString(){
        return sdf.format(d);
    }
}
于 2012-09-06T13:01:18.747 回答
0

您可以String使用相同的SimpleDateFormat. 该format方法这样做:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2012-07-27");
System.out.println(sdf.format(date1);
于 2012-09-06T13:01:35.253 回答
0

您必须使用另一个SimpleDateFormat具有所需输出格式的 ( format())

于 2012-09-06T12:59:21.213 回答
0

中没有“格式”属性java.util.Date。一个Date实例是一个相当简单的对象,代表一个时间点(实际上,它的状态仅由它在内部存储的 unix 时间戳定义)。

正如其他人指出的那样,使用(例如) aSimpleDateFormat将实例打印Date为字符串。

于 2012-09-06T13:04:16.247 回答
0
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-07-27");
System.out.println(dateFormat.format(date));
于 2012-09-06T13:04:29.807 回答
0
于 2016-12-26T02:58:48.443 回答