将字符串转换为java中的日期格式为2012-07-27

时间:2012-09-06 12:57:42

标签: java

我的输入字符串为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那样返回日期对象而不是字符串任何帮助请

任何帮助都非常感谢

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

首先,我认为重要的是要注意System.out.println隐式调用其参数的toString方法。参数必须是Object或其子类。 DateObject的子类。话虽如此,请看一下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);
    }
}

答案 2 :(得分:0)

您必须使用具有所需输出格式(SimpleDateFormat

的其他format()

答案 3 :(得分:0)

您可以使用相同的String获取日期SimpleDateFormatformat方法执行此操作:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2012-07-27");
System.out.println(sdf.format(date1);

答案 4 :(得分:0)

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

正如其他人所说,使用(例如)SimpleDateFormatDate实例打印为字符串。

答案 5 :(得分:0)

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-07-27");
System.out.println(dateFormat.format(date));

答案 6 :(得分:0)

TL;博士

LocalDate.parse( "2012-07-27" )
         .toString()
  

2012-07-27

详细

现代的方法是使用java.time类。

LocalDate类表示没有时间且没有时区的仅限日期的值。

标准格式

您的输入字符串格式符合ISO 8601标准。在解析/生成表示日期时间值的字符串时,java.time类默认使用ISO 8601格式。所以根本不需要指定格式化模式。

LocalDate ld = LocalDate.parse( "2012-07-27" );

不要将日期时间对象与表示其值的字符串混淆。日期时间类/对象可以解析字符串并生成字符串,但String始终是一个独立且不同的对象。

String output = ld.toString();
  

2012-07-27

自定义格式

如果您的输入是非标准输入,请定义DateTimeFormatter以匹配。

String input = "20-12-2005" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
  

ld.toString():2012-07-27

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore