如何将日期转换为字符串,再转换回日期?

13

嗨,我想将当前日期转换为这种格式 YYYY-MM-DD。但是,它会将日期转换为 String 格式,而我希望将其转换回 Date 格式。所以有人能给个建议吗?

这是我目前的代码:

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
 Date date = new Date();
 String datestring = dateFormat.format(date); 

也许这可以帮助你 Java字符串转日期 - Bharath R
2
日期对象没有格式,只有它的字符串表示具有格式。 - Dhana Krishnasamy
3
在我的观点中,日期应该始终以日期格式存储,而解析自己的日期不是一个好习惯。日期格式应该用于用户交互,而不是用于存储数据本身。如果您想以某种编程方式将日期转换为字符串,则使用序列化方法会更加方便。 - Danstahr
1
请注意:此问题使用了已经过时的日期时间类,现在已被现代的java.time类所取代。 - Basil Bourque
5个回答

26

试试这个:

 String DATE_FORMAT_NOW = "yyyy-MM-dd";
 Date date = new Date();
 SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
 String stringDate = sdf.format(date );
    try {
        Date date2 = sdf.parse(stringDate);
    } catch(ParseException e){
     //Exception handling
    } catch(Exception e){
     //handle exception
    }

顺便提一下,虽然这个答案是正确的,但现在已经过时了。这里使用的类很麻烦且有缺陷,现在已被现代的java.time类所取代。 - Basil Bourque

4
请使用 DateFormat#parse(String) 方法:
Date date = dateFormat.parse("2013-10-22");

谢谢!但我想自动生成今天的日期,而不是输入自己的字符串。我该怎么做呢? - ayampenyet
一个新的日期实例具有当前日期,只需执行“new Date()”。 - qqilihq
你的代码中已经有了变量 datestring。直接使用它替代 qqilihq 的示例中的常量。 - Dawood ibn Kareem

1

简述

如何将日期转换为字符串并再次转换为日期?

LocalDate.now().toString()

2017年1月23日
...和...
LocalDate.parse( "2017-01-23" )

java.time

问题使用了与Java早期版本捆绑的麻烦的旧日期时间类。这些类现在已经过时,被内置于Java 8、Java 9及更高版本中的java.time类所取代。
确定今天的日期需要一个时区。对于任何给定的时刻,日期因时区而异。如果没有由您提供,将应用您的JVM当前默认时区。该默认值可能在运行时的任何时刻更改,因此不可靠。我建议您始终指定您想要/期望的时区。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate ld = LocalDate.now( z ) ;

ISO 8601

您期望的YYYY-MM-DD格式恰好符合ISO 8601标准。

当解析/生成字符串时,java.time类默认使用该标准。因此,您可以直接调用LocalDate::parseLocalDate::toString而无需指定格式化模式。

String s = ld.toString() ;

解析:

进行解析:

LocalDate ld = LocalDate.parse( s ) ;

关于java.time

java.time框架已经内置于Java 8及其之后的版本中。这些类取代了繁琐的旧式遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

Joda-Time项目现在处于维护模式,建议迁移到java.time类。

要了解更多信息,请查看Oracle教程。并在Stack Overflow上搜索许多示例和解释。规范是JSR 310
在哪里获取java.time类?

ThreeTen-Extra项目通过添加额外的类扩展了java.time。该项目是java.time可能未来增加内容的试验场。您可能会在这里找到一些有用的类,如Interval, YearWeek, YearQuarter更多


你能给我指出一个支持你声称“默认值在运行时可以随时更改,因此不可靠”的来源吗?我觉得这很令人惊讶。 - omajid
@omajid TimeZone.setDefault 可以在 JVM 运行时被任何线程的任何应用程序中的任何代码调用。更改会立即影响该 JVM 中所有其他线程运行的所有其他代码。这是相当不可预测的,超出了程序员的控制范围。通过传递可选的 ZoneId 参数始终明确指定所需/期望的时区。 - Basil Bourque

0
使用此函数将日期转换为字符串
public String convertDateToString(Date date, String format) {
        String dateStr = null;
        DateFormat df = new SimpleDateFormat(format);
        try {
            dateStr = df.format(date);
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return dateStr;
    }

Java中将日期转换为字符串。然后再将字符串转换为日期

public Date convertStringToDate(String dateStr, String format) {
        Date date = null;
        DateFormat df = new SimpleDateFormat(format);
        try {
            date = df.parse(dateStr);
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return date;
    }

Java中将字符串转换为日期


0

尝试使用此函数

public static Date StringToDate(String strDate) throws ModuleException {
    Date dtReturn = null;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");
    try {
        dtReturn = simpleDateFormat.parse(strDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return dtReturn;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接