在Java中将日期转换为字符串
在本文中,我们将介绍如何在Java中将Date转换为String。
在Java 8之前,SimpleDateFormat是用于以指定格式将Date转换为String的类。从Java 8开始,还有另一个选项java.time.format.DateTimeFormatter类可用于转换。
使用SimpleDateFormat将日期转换为字符串
在创建SimpleDateFormat实例时,我们可以传递模式进行格式化。 SimpleDateFormat有一个格式化方法,该方法将Date实例作为参数,并返回格式化的日期(和时间)字符串。
这是一个使用不同日期和时间格式将当前日期转换为String的示例。
import java.text.SimpleDateFormat; import java.util.Date; public class FormatDate { public static void main(String[] args) { // For date in format 2019.07.04 AD at 11:08:54 IST formatDate("yyyy.MM.dd G 'at' HH:mm:ss z"); // For date in format Mon, Oct 7, '19 formatDate("EEE, MMM d, ''yy"); // For date in format Monday, October 07, 2019 formatDate("EEEE, MMMM dd, yyyy"); // For time in format 07 o'clock PM, India Standard Time formatDate("hh 'o''clock' a, zzzz"); // For time in 24 Hr format 19:41:59:635 PM formatDate("HH:mm:ss:SSS a"); // For date-time in format 2019-10-07T19:27:38.571+0530 formatDate("yyyy-MM-dd'T'HH:mm:ss.SSS Z"); // For date in format 05/08/2016 formatDate("MM/dd/yyyy"); // For date in format 07/10/2019 19:29:40 PM formatDate("dd/MM/yyyy HH:mm:ss a"); // For date in format 07/10/2019 19:29:40 PM formatDate("dd/MMM/yyyy GGG HH:mm:ss:SSS a"); } private static void formatDate(String pattern){ Date dt = new Date(); // Create date format as per specified pattern SimpleDateFormat sdf = new SimpleDateFormat(pattern); String formattedDate = sdf.format(dt); System.out.println("Formatted Date- " + formattedDate + " for Pattern: " + pattern); } }
输出量
Formatted Date- 2019.10.09 AD at 18:15:53 IST for Pattern: yyyy.MM.dd G 'at' HH:mm:ss z Formatted Date- Wed, Oct 9, '19 for Pattern: EEE, MMM d, ''yy Formatted Date- Wednesday, October 09, 2019 for Pattern: EEEE, MMMM dd, yyyy Formatted Date- 06 o'clock PM, India Standard Time for Pattern: hh 'o''clock' a, zzzz Formatted Date- 18:15:53:978 PM for Pattern: HH:mm:ss:SSS a Formatted Date- 2019-10-09T18:15:53.979 +0530 for Pattern: yyyy-MM-dd'T'HH:mm:ss.SSS Z Formatted Date- 10/09/2019 for Pattern: MM/dd/yyyy Formatted Date- 09/10/2019 18:15:53 PM for Pattern: dd/MM/yyyy HH:mm:ss a Formatted Date- 09/Oct/2019 AD 18:15:53:981 PM for Pattern: dd/MMM/yyyy GGG HH:mm:ss:SSS a
使用DateTimeFormatter将日期转换为字符串
在DateTimeFormatter类中,有一个静态的Pattern()方法,我们可以使用该方法指定日期时间格式的模式。
使用LocalDate(代表日期),LocalTime(代表时间)和LocalDateTime(代表日期和时间)的format()方法,可以将Date转换为String。
使用ofPattern()方法创建的DateTimeFormatter实例在format()方法中作为参数传递。
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class FormatDate { public static void main(String[] args) { // LocalDateTime // For date in format 2019.07.04 AD at 11:08:54 IST LocalDateTime dateTime = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd G 'at' HH:mm:ss"); String formattedDate = dateTime.format(formatter); System.out.println("Formatted Date- " + formattedDate); // For date in format Mon, Oct 7, '19 formatter = DateTimeFormatter.ofPattern("EEE, MMM d, ''yy"); formattedDate = dateTime.format(formatter); System.out.println("Formatted Date- " + formattedDate); // For date in format Monday, October 07, 2019 formatter = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy"); formattedDate = dateTime.format(formatter); System.out.println("Formatted Date- " + formattedDate); // For date-time in format 2019-10-07T19:27:38.571+0530 formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"); formattedDate = dateTime.format(formatter); System.out.println("Formatted Date- " + formattedDate); // For date in format 07/10/2019 19:29:40 PM formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss a"); formattedDate = dateTime.format(formatter); System.out.println("Formatted Date- " + formattedDate); // For date in format 07/Oct/2019 AD 14:25:51:048 PM formatter = DateTimeFormatter.ofPattern("dd/MMM/yyyy GGG HH:mm:ss:SSS a"); formattedDate = dateTime.format(formatter); System.out.println("Formatted Date- " + formattedDate); // LocalTime LocalTime time = LocalTime.now(); // For time in 24 Hr format 19:41:59:635 PM formatter = DateTimeFormatter.ofPattern("HH:mm:ss:SSS a"); formattedDate = time.format(formatter); System.out.println("Formatted Time- " + formattedDate); // LocalDate LocalDate date = LocalDate.now(); // For date in format 05/08/2016 formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy"); formattedDate = date.format(formatter); System.out.println("Formatted Date- " + formattedDate); } }
输出量
Formatted Date- 2019.10.10 AD at 14:27:38 Formatted Date- Thu, Oct 10, '19 Formatted Date- Thursday, October 10, 2019 Formatted Date- 2019-10-10T14:27:38.014 Formatted Date- 10/10/2019 14:27:38 PM Formatted Date- 10/Oct/2019 AD 14:27:38:014 PM Formatted Time- 14:27:38:194 PM Formatted Date- 10/10/2019
如果模式中包含区域偏移(Z)或者时区名称(z),则需要一个ZonedDateTime实例,因为LocalDateTime没有时区的字段或者值。
import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; public class FormatDate { public static void main(String[] args) { formatDate("yyyy.MM.dd G 'at' HH:mm:ss z"); // For time in format 07 o'clock PM, India Standard Time formatDate("hh 'o''clock' a, zzzz"); // For date-time in format 2019-10-07T19:27:38.571+0530 formatDate("yyyy-MM-dd'T'HH:mm:ss.SSS Z"); } private static void formatDate(String pattern){ ZonedDateTime dateTime = ZonedDateTime.now(); // Create DateTimeFormatter instance as per specified pattern DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); String formattedDate = dateTime.format(formatter); System.out.println("Formatted Date- " + formattedDate + " for Pattern: " + pattern); } }
输出量
Formatted Date- 2019.10.09 AD at 18:25:00 IST for Pattern: yyyy.MM.dd G 'at' HH:mm:ss z Formatted Date- 06 o'clock PM, India Standard Time for Pattern: hh 'o''clock' a, zzzz Formatted Date- 2019-10-09T18:25:00.975 +0530 for Pattern: yyyy-MM-dd'T'HH:mm:ss.SSS Z
使用DateTimeFormatter.ofLocalizedDate()方法
在DateTimeFormatter类中,还可以使用以下静态方法将日期和时间转换为String。
ofLocalizedDate(FormatStyle dateStyle)–返回ISO编年史的特定于语言环境的日期格式。
ofLocalizedDateTime(FormatStyle dateTimeStyle)–返回ISO编年史的特定于语言环境的日期时间格式化程序。
ofLocalizedDateTime(FormatStyle dateStyle,FormatStyle timeStyle)–返回ISO年代的特定于语言环境的日期和时间格式。
ofLocalizedTime(FormatStyle timeStyle)–返回ISO编年史的特定于语言环境的时间格式。
这里的java.time.format.FormatStyle是一个Enum,具有以下常量字段-
FULL –全文样式,带有最详细的信息。例如,格式可以是" 1952年4月12日,星期二"或者"太平洋标准时间下午3:30:42"。
长–长文本样式,带有很多细节。例如,格式可能是" 1952年1月12日"。
中-中等文字样式,带有一些细节。例如,格式可能是" 1952年1月12日"。
简短内容-短文本样式,通常为数字。例如,格式可能是" 12.13.52"或者" 3:30 pm"。
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; public class FormatDate { public static void main(String[] args) { LocalDateTime dateTime = LocalDateTime.now(); System.out.println("Full format- " +dateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL))); System.out.println("LONG format- " +dateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG))); System.out.println("MEDIUM format- " +dateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM))); System.out.println("SHORT format- " +dateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT))); } }
输出量
Full format- Wednesday, 9 October, 2019 LONG format- 9 October 2019 MEDIUM format- 09-Oct-2019 SHORT format- 09/10/19