在Java中将字符串转换为日期
在本文中,我们将介绍如何在Java中将String转换为Date。
在Java 8之前,SimpleDateFormat是Java中用于将String转换为Date的选项。从Java 8开始,我们可以使用java.time包中的类,这些类是新的日期和时间API的一部分。我们将看到使用这两个类的方法的示例。
使用SimpleDateFormat将字符串转换为日期
我们可以使用Java SimpleDateFormat类的parse()方法来解析字符串中的文本以生成Date。
第一件事是创建一个传递日期和时间模式进行解析的SimpleDateFormat实例。然后调用parse()方法并传递日期字符串,该方法返回已解析的Date。如果无法解析请求的结果,则抛出ParseException。
在示例中,不同类型的日期字符串被转换为java.util.Date实例。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ParseDate { public static void main(String[] args) { try { parseDT("dd/MM/yyyy", "09/08/2019"); parseDT("MM-dd-yyyy", "09-08-2019"); // Date will default to epoch (January 1, 1970) parseDT("HH:mm:ss", "20:04:19"); parseDT("MM-dd-yyyy HH:mm:ss", "09-08-2019 20:04:19"); }catch (ParseException e) { System.out.println("Error while parsing- " + e.getMessage()); } } private static void parseDT(String pattern, String dateTime) throws ParseException{ // Create date format as per specified pattern SimpleDateFormat sdf = new SimpleDateFormat(pattern); // parsing Date dt = sdf.parse(dateTime); System.out.println("After parsing- " + dt); } }
输出量
After parsing- Fri Aug 09 00:00:00 IST 2019 After parsing- Sun Sep 08 00:00:00 IST 2019 After parsing- Thu Jan 01 20:04:19 IST 1970 After parsing- Sun Sep 08 20:04:19 IST 2019
使用新的日期和时间API将字符串转换为日期
从Java 8开始,我们可以使用LocalDate(代表日期),LocalTime(代表时间)和LocalDateTime(代表日期和时间)的parse()方法将String转换为Date。
解析方法有两种变体-
parse(CharSequence text)–这里的text参数代表必须解析的日期字符串。字符串必须代表有效的日期,时间或者日期时间
parse(CharSequence文本,DateTimeFormatter格式化程序)–我们可以传递一个DateTimeFormatter实例,该实例表示要用于解析的格式化程序。
将字符串转换为LocalDate
LocalDate dt = LocalDate.parse("2019-08-03");// Date in ISO-8601 format
将字符串转换为LocalTime
LocalTime dt = LocalTime.parse("10:15:30");// Time in ISO-8601 format
将字符串转换为LocalDateTime
LocalDateTime dt = LocalDateTime.parse("2007-12-03T10:15:30");// Date-Time in ISO-8601 format
将字符串转换为ZonedDateTime
如果有时区信息,请使用ZonedDateTime。
// Date-Time with time zone in ISO-8601 format ZonedDateTime dt = ZonedDateTime.parse("2019-07-03T10:15:30+01:00[Europe/Paris]");
使用自定义格式器将字符串转换为日期
在DateTimeFormatter类中,有一个静态的Pattern()方法,我们可以使用该方法指定日期时间格式的模式。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.Date; public class ParseDate { public static void main(String[] args) { try{ LocalDate localDate = LocalDate.parse("30/06/2019", DateTimeFormatter.ofPattern("dd/MM/yyyy")); System.out.println("Date " + localDate); localDate = LocalDate.parse("Thu, Sep 19, '19", DateTimeFormatter.ofPattern("EEE, MMM d, ''yy")); System.out.println("Date " + localDate); LocalTime localTime = LocalTime.parse("20:17:46", DateTimeFormatter.ofPattern("HH:mm:ss")); System.out.println("Time " + localTime); //DateTime LocalDateTime localDateTime = LocalDateTime.parse("2019-08-12T20:17:46.384Z", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz")); System.out.println("Date-Time " + localDateTime); // DateTime with zone offset ZonedDateTime zonedDateTime = ZonedDateTime.parse("2019-08-18 AD at 10:13:46 PDT", DateTimeFormatter.ofPattern("yyyy-MM-dd G 'at' HH:mm:ss z")); System.out.println("Date " + zonedDateTime); // DateTime with zone offset zonedDateTime = ZonedDateTime.parse("2019-08-15 03:32:12-0430", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssxx")); System.out.println("Date " + zonedDateTime); }catch(DateTimeParseException ex){ ex.printStackTrace(); } } }
输出量
Date 2019-06-30 Date 2019-09-19 Time 20:17:46 Date-Time 2019-08-12T20:17:46.384 Date 2019-08-18T10:13:46-07:00[America/Los_Angeles] Date 2019-08-15T03:32:12-04:30