在 Java 中使用不同的格式将字符串解析为日期

IT小君   2021-09-15T07:55:29

我想转换StringDate不同的格式。

例如,

我从用户那里得到,

String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format

我想将其转换fromDate"yyyy-MM-dd"格式的 Date 对象

我怎样才能做到这一点?

点击广告,支持我们为你提供更好的服务
评论(9)
IT小君

看看SimpleDateFormat代码是这样的:

SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

try {

    String reformattedStr = myFormat.format(fromUser.parse(inputString));
} catch (ParseException e) {
    e.printStackTrace();
}
2021-09-15T07:55:30   回复
IT小君

tl;博士

LocalDate.parse( 
    "19/05/2009" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) 
)

细节

其他带有java.util.Datejava.sql.Date和 的答案SimpleDateFormat现已过时。

LocalDate

处理日期时间的现代方法是使用 java.time 类,特别是LocalDate. LocalDate级表示没有时间一天和不同时区的日期,唯一的价值。

DateTimeFormatter

要解析或生成表示日期时间值的字符串,请使用DateTimeFormatter该类。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );

不要将日期时间对象与表示其值的字符串混为一谈。一个日期时间对象没有格式,而字符串中。日期时间对象(例如LocalDate)可以生成字符串来表示其内部值,但日期时间对象和字符串是不同的独立对象。

您可以指定任何自定义格式来生成字符串。或者让 java.time 做自动本地化的工作。

DateTimeFormatter f = 
    DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
                     .withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );

转储到控制台。

System.out.println( "ld: " + ld + " | output: " + output );

ld: 2009-05-19 | 输出:2009 年狂欢节 19 月

在 IdeOne.com 中查看操作


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat

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

要了解更多信息,请参阅Oracle 教程并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310

您可以直接与您的数据库交换java.time对象。使用符合JDBC 4.2或更高版本JDBC 驱动程序不需要字符串,不需要类。java.sql.*

从哪里获得 java.time 类?

ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多

2021-09-15T07:55:30   回复
IT小君

使用SimpleDateFormat类:

private Date parseDate(String date, String format) throws ParseException
{
    SimpleDateFormat formatter = new SimpleDateFormat(format);
    return formatter.parse(date);
}

用法:

Date date = parseDate("19/05/2009", "dd/MM/yyyy");

为了提高效率,您可能希望将格式化程序存储在哈希图中。hashmap 是 util 类的静态成员。

private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>();

public static Date parseDate(String date, String format) throws ParseException
{
    SimpleDateFormat formatter = hashFormatters.get(format);

    if (formatter == null)
    {
        formatter = new SimpleDateFormat(format);
        hashFormatters.put(format, formatter);
    }

    return formatter.parse(date);
}
2021-09-15T07:55:30   回复
IT小君

将字符串日期转换为 java.sql.Date

String fromDate = "19/05/2009";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date dtt = df.parse(fromDate);
java.sql.Date ds = new java.sql.Date(dtt.getTime());
System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
2021-09-15T07:55:31   回复
IT小君

检查 javadocsjava.text.SimpleDateFormat它描述了你需要的一切。

2021-09-15T07:55:31   回复
IT小君

虽然SimpleDateFormat确实可以满足您的需求,但您可能还想查看Joda Time,它显然是 Java 7 中重做 Date 库的基础。虽然我没有经常使用它,但我只听到了一些好消息关于它,如果你在你的项目中广泛地操纵日期,它可能值得研究。

2021-09-15T07:55:31   回复
IT小君

假设你有一个这样的字符串:

String mDate="2019-09-17T10:56:07.827088"

现在我们想StringJavaKotlin 中改变这种格式,将日期和时间分开

爪哇:

我们有一种提取日期的方法

public String getDate() {
    try {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
        Date date = dateFormat.parse(mDate);
        dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
        return dateFormat.format(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return null;
}

Return 这是 : 09/17/2019

我们有提取时间的方法

public String getTime() {

    try {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
        Date date = dateFormat.parse(mCreatedAt);
        dateFormat = new SimpleDateFormat("h:mm a", Locale.US);
        return dateFormat.format(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return null;
}

Return这是: 上午 10:56

科特林:

我们有一个提取日期的函数

fun getDate(): String? {

    var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US)
    val date = dateFormat.parse(mDate!!)
    dateFormat = SimpleDateFormat("MM/dd/yyyy", Locale.US)
    return dateFormat.format(date!!)
}

Return 这是 : 09/17/2019

我们有提取时间的方法

fun getTime(): String {

    var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US)
    val time = dateFormat.parse(mDate!!)
    dateFormat = SimpleDateFormat("h:mm a", Locale.US)
    return dateFormat.format(time!!)
}

Return这是: 上午 10:56

2021-09-15T07:55:31   回复
IT小君

格式化日期并转换为字符串的简单方法

    Date date= new Date();

    String dateStr=String.format("%td/%tm/%tY", date,date,date);

    System.out.println("Date with format of dd/mm/dd: "+dateStr);

输出:日期格式为 dd/mm/dd:21/10/2015

2021-09-15T07:55:31   回复
IT小君

Date对象具有无格式,它是一个表示。日期可以String您喜欢格式显示

例如“ yyyy-MM-dd”、“ yy-MMM-dd”、“ dd-MMM-yy”等。

要实现这一点,您可以使用 SimpleDateFormat

尝试这个,

        String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format

        SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); 
        SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type
            String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer
            System.out.println(dateMyFormat); // outputs : 2009-05-19

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

此输出:2009-05-19

2021-09-15T07:55:32   回复