在Java中将日期转换为字符串

时间:2020-01-09 10:35:24  来源:igfitidea点击:

在本文中,我们将介绍如何在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