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

以java格式将字符串转换为日期,格式为2012-07-27,java,Java,我的输入字符串为2012-07-27,我希望输出为日期,但格式与2012-07-27相同 我的代码是 DateFormat df=新的简化格式(“yyyy-MM-dd hh:MM:ss”) 我的输出是 Fri Jul 27 00:00:00 IST 2012 但是我想返回日期对象,比如2012-07-26 23:59:59,而不是字符串。有什么帮助吗 任何帮助都非常感谢您必须使用另一个具有所需输出格式(format())的SimpleDataFormat您必须使用另一个具有所需输出格式(for

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

我的代码是

DateFormat df=新的简化格式(“yyyy-MM-dd hh:MM:ss”)

我的输出是

Fri Jul 27 00:00:00 IST 2012
但是我想返回日期对象,比如2012-07-26 23:59:59,而不是字符串。有什么帮助吗


任何帮助都非常感谢

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

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

您可以使用与解析日期相同的
SimpleDataFormat
,将日期格式化为字符串

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
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-07-27");
System.out.println(dateFormat.format(date));

您可以使用与解析日期相同的
simpleDataFormat
,将日期格式化为字符串

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
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-07-27");
System.out.println(dateFormat.format(date));

首先,我认为需要注意的是,
System.out.println
隐式调用其参数的
toString
方法。参数必须是
对象
或其子类。而
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
。这正是你所看到的

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

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

还有

一个可能的,尽管荒谬的解决方法是创建自己的包装器类

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

首先,我认为需要注意的是,
System.out.println
隐式调用其参数的
toString
方法。参数必须是
对象
或其子类。而
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
。这正是你所看到的

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

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

还有

一个可能的,尽管荒谬的解决方法是创建自己的包装器类

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

您可以使用相同的
SimpleDataFormat
获取日期的
字符串
表示形式。该方法执行以下操作:

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

您可以使用相同的
SimpleDataFormat
获取日期的
字符串
表示形式。该方法执行以下操作:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2012-07-27");
System.out.println(sdf.format(date1);
中没有“格式”属性。
Date
实例是一个相当简单的对象,表示一个时刻(实际上,它的状态仅由它内部存储的unix时间戳定义)

如其他人所述,使用(例如)a将
日期
实例打印为字符串。

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

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
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-07-27");
System.out.println(dateFormat.format(date));
如其他人所述,使用(例如)a将
日期
实例打印为字符串。

tl;博士
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
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-07-27");
System.out.println(dateFormat.format(date));
2012-07-27

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

该类表示一个仅限日期的值,不包含一天中的时间和时区

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

LocalDate ld = LocalDate.parse( "2012-07-27" );
不要将日期时间对象与表示其值的字符串合并。日期时间类/对象可以解析字符串并生成字符串,但
字符串
始终是一个独立的对象

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 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

tl;博士 2012-07-27

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

该类表示一个仅限日期的值,不包含一天中的时间和时区

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

LocalDate ld = LocalDate.parse( "2012-07-27" );
不要将日期时间对象与表示其值的字符串合并。日期时间类/对象可以解析字符串并生成字符串,但
字符串
始终是一个独立的对象

String output = ld.toString();
2012-07-27

自定义格式