[英]Date object from DAY, MONTH, YEAR
我正在尝试创建一个在 Java 中将 DAY、MONTH、YEAR 转换为 Date 对象的方法
我有
String DAY = "31"
String YEAR = "2012"
String MONTH = "11"
我需要一个可配置的格式作为输出。
String format = "MM/dd/yyy";
我将始终只获得从“01”到“31”的 DAY 字符串
我将始终只获得从“1000”到“9999”的 YEAR 字符串
我将始终只获得从“01”到“12”的 MONTH 字符串(永远不会得到 Jan、Feb 等)
我知道 SimpleDateFormat(format) 可以在一定程度上工作。
new SimpleDateFormat("MM/dd/yyyy") 会将 "02/01/2010" 解析为 2010 年 2 月 1 日,但
new SimpleDateFormat("mm/dd/yyyy") 将解析 "02/01/2010" 为 Jan 01 2010
是否可以在 java 中编写一个通用方法,根据可配置模式将给定的字符串(DAY、MONTH、YEAR)转换为 Date 对象? 并且可以抛出异常的是我提供了错误的 DAY、MONTH、YEAR 组合(例如 DAY = "31", MONTH = "02", YEAR = "2010")
就像是 :
Date dateParser(String format){
String DAY = "01";
String YEAR = "1922";
String MONTH = "02";
return date;
}
基本上有两种方式:
一些中间形式是可以想象的,但我建议您采取纯粹的立场并仅使用其中一种方式。 Arvind Kumar Avinash 的答案显示了选项 1。我更喜欢选项 2.,所以让我演示一下。
我建议您使用 java.time,现代 Java 日期和时间 API 用于您的日期工作。
String format = "MM/dd/yyy";
String day = "31";
String year = "2012";
String month = "11";
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(format, Locale.US);
String isoDateString = year + '-' + month + '-' + day;
LocalDate date = LocalDate.parse(isoDateString);
String formattedDate = date.format(dateFormatter);
System.out.println(formattedDate);
由于 11 月(11 月)只有 30 天,这段代码非常明智地抛出了一个异常:
线程“main”中的异常 java.time.format.DateTimeParseException:无法解析文本“2012-11-31”:无效日期“NOVEMBER 31”
也就是说,我们有免费的输入验证。 对于有效日期,代码将根据要求解析日期和格式。
Oracle 教程:解释如何使用 java.time 的日期时间。
我建议您从过时且容易出错的java.util
date-time API 和SimpleDateFormat
切换到现代java.time
date-time API 和相应的格式化 API(包, java.time.format
)。 从Trail: Date Time 中了解有关现代日期时间 API 的更多信息。
请注意, mm
用于表示minute
; 不是month
。 对于month
,你用MM
。 检查这个以获取更多信息。
使用现代日期时间 API:
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
// Test
System.out.println(getLocalDate("2010", "02", "28"));
System.out.println(getLocalDate("2010", "02", "31"));
}
static LocalDate getLocalDate(String year, String month, String dayOfMonth) {
return LocalDate.of(Integer.parseInt(year), Integer.parseInt(month), Integer.parseInt(dayOfMonth));
}
}
输出:
2010-02-28
Exception in thread "main" java.time.DateTimeException: Invalid date 'FEBRUARY 31'
at java.base/java.time.LocalDate.create(LocalDate.java:459)
at java.base/java.time.LocalDate.of(LocalDate.java:271)
at Main.getLocalDate(Main.java:11)
at Main.main(Main.java:7)
请注意,日期时间对象应该存储有关日期、时间、时区等的信息,而不是有关格式的信息。 当您打印日期时间类型的对象时,它应该打印其toString
方法返回的内容。 如果您需要以不同的格式打印日期时间,您需要一个格式化类(例如DateTimeFormatter
),它可以以您想要的模式返回一个字符串,例如
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Test
System.out.println(getFormattedLocalDate("2010/02/28", "yyyy/MM/dd", "EEEE dd MMMM yyyy"));
System.out.println(getFormattedLocalDate("28/02/2010", "dd/MM/yyyy", "yyyy MMM EEE dd"));
}
static String getFormattedLocalDate(String date, String inputPattern, String outputPattern) {
return LocalDate.parse(date, DateTimeFormatter.ofPattern(inputPattern))
.format(DateTimeFormatter.ofPattern(outputPattern));
}
}
输出:
Sunday 28 February 2010
2010 Feb Sun 28
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.