Java自定义日期格式模式是一种用于格式化日期的模式,它可以帮助我们将日期转换为我们想要的格式。它使用特定的字符来表示不同的日期和时间元素,例如年、月、日、小时、分钟和秒。
Java中使用SimpleDateFormat类来格式化日期,该类接受一个字符串作为参数,该字符串表示要使用的自定义格式。例如,如果我们想要将当前时间格式化为“yyyy-MM-dd HH:mm:ss”,则可以使用以下代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdf.format(new Date()); System.out.println(dateStr);
上面的代码将当前时间格式化为“yyyy-MM-dd HH:mm:ss”形式。其中,yyyy表示4位数年份;MM表示2位数月份;dd表示2位数天数;HH表示24小时标准小时数;mm表示分钟数;ss表示2位数的分钟数。
此外还可以使用其他字母来表达不同的意思。例如E代表星期几、a代表上午/下午、z代表所在地区/国家/地理位置信息。这些字母都是大小写敏感的,因此必须正确书写才能得到正确的输出。
下面的列表显示了我们可以用来创建自定义数据格式模式的格式符号。
G AD GGGG Anno Domini GGGGG A
u/uuu/uuuu 2014 uu 12 uuuuu 02014
y/yyy/yyyy 2014 yy 12 yyyyy 02014
D 150
M 5 MM 05 MMM Jul MMMM July
d 21 dd 01 ddd 001 ddd 029
Q 3 QQ 03 QQQ Q3 QQQQ 3rd quarter
Y 2014 YY 12 YYY/YYYY 2014
w 31
W 2
E 7 EE 07 EEE Sun EEEEE Sunday
F 1
a AM
h 2
K 3
k 7
H 7 HH 07
mm 21
ss 12
SSSSSSSSS 000006789
A 12014012
n 789
N 12014012001289
VV America/Chicago
z CDT
Z -0500 ZZ -0500 ZZZ -05:00 ZZZZ GMT-05:00
O GMT-5
X +09 XX +0930 XXX +09:30 XXX -05:00 XXXX +093045 XXXXX +08:30:45
xx -0500
mm 30 pppmm " 30"
"Hello" MMMM Hello July
"""Hello""" MMMM "Hello" July
import java.time.LocalDate; import java.time.Month; import java.time.format.DateTimeFormatter; import java.time.temporal.Temporal; import java.util.Locale; public class Main { public static void main(String[] args) { LocalDate ld = LocalDate.of(2014, Month.JUNE, 30); format(ld, "M/d/yyyy"); format(ld, "MM/dd/yyyy"); format(ld, "MMM dd, yyyy"); format(ld, "MMMM dd, yyyy"); format(ld, "EEEE, MMMM dd, yyyy"); format(ld, ""Month" q "in" QQQ"); } public static void format(Temporal co, String pattern) { DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern); String str = fmt.format(co); System.out.println(pattern + ": " + str); } }
上面的代码生成以下结果。
我们可以使用DateTimeFormatter类的Ptern()方法创建一个具有指定格式模式和语言环境的DateTimeFormatter对象。
static DateTimeFormatter ofPattern(String pattern) static DateTimeFormatter ofPattern(String pattern, Locale locale)
以下代码显示如何创建两个格式化程序,以便在默认语言环境和德语语言环境中以“Month day,Year”格式设置日期格式。
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("MMMM dd, yyyy"); DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("MMMM dd, yyyy", Locale.GERMAN);
DateTimeFormatter
类withLocale()方法从同一模式返回指定区域设置的DateTimeFormatter对象。
DateTimeFormatter fmt2 = fmt1.withLocale(Locale.GERMAN);
DateTimeFormatter
类中的 getLocale()
方法返回当前格式化程序的语言环境。
import java.time.LocalDate; import java.time.LocalTime; import java.time.Month; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.Temporal; import java.util.Locale; public class Main { public static void main(String[] args) { LocalTime lt = LocalTime.of(16, 30, 5, 78899); format(lt, "HH:mm:ss"); format(lt, "KK:mm:ss a"); format(lt, "[MM-dd-yyyy][" at" HH:mm:ss]"); ZoneId usCentral = ZoneId.of("America/Chicago"); ZonedDateTime zdt = ZonedDateTime.of(LocalDate.now(), lt, usCentral); format(zdt, "MM/dd/yyyy HH:mm:ssXXX"); format(zdt, "MM/dd/yyyy VV"); format(zdt, "[MM-dd-yyyy][" at" HH:mm:ss]"); } public static void format(Temporal co, String pattern) { DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern, Locale.US); String str = fmt.format(co); System.out.println(pattern + ": " + str); } }
上面的代码生成以下结果。
定义自定义日期时间格式时我们可以使用符号 [
和]
以标记可选部分。
只有当信息可用于所有元素时,才会输出包含在可选节中的模式。
以下代码显示如何使用可选格式。
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Month; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { String pattern = "MM/dd/yyyy[ "at" HH:mm:ss]"; DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern); LocalDate ld = LocalDate.of(2014, Month.JUNE, 30); LocalTime lt = LocalTime.of(17, 30, 12); LocalDateTime ldt = LocalDateTime.of(ld, lt); String str1 = fmt.format(ld); System.out.println(str1); String str2 = fmt.format(ldt); System.out.println(str2); } }
上面的代码生成以下结果。
我们可以从 DateTimeFormatterBuilder
创建自定义日期时间格式。
以下代码构建一个 DateTimeFormatter
对象以格式化日期格式,例如“YEAR中的新年度在WEEK_DAY”:
import java.time.LocalDate; import java.time.Month; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.format.TextStyle; import java.time.temporal.ChronoField; public class Main { public static void main(String[] args) { DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendLiteral("New Year in ") .appendValue(ChronoField.YEAR) .appendLiteral(" is on ") .appendText(ChronoField.DAY_OF_WEEK,TextStyle.FULL_STANDALONE) .toFormatter(); LocalDate ld = LocalDate.of(2014, Month.JANUARY, 1); String str = ld.format(formatter); System.out.println(str); } }
上面的代码生成以下结果。
我们可以使用DateTimeFormatterBuilder中的模式创建相同的自定义格式化程序。
import java.time.LocalDate; import java.time.Month; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { LocalDate ld = LocalDate.of(2014,Month.JANUARY,1); String pattern = ""New Year in" yyyy "is on" EEEE"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); String str = ld.format(formatter); System.out.println(str); } }
上面的代码生成以下结果。
Java流-Java函数流我们可以有一个可以根据需要生成值的函数。以下两种静态方法从Stream接口从函数生成无限流。T StreamT iterate...
Java流计数Streams通过count()方法支持计数操作,该方法将流中的元素数返回为long。以下代码显示employee流中的元素数量。import...
Java流分组Collectors类中的groupingBy()方法返回一个收集器,用于在将数据收集到Map之前对数据进行分组。 它类似于SQL中的“gro...