Java 是否将给定日期转换为通用日期格式?
我必须获取一个输入日期并将其转换为通用日期格式。 为此,我创建了一个函数(不是泛型函数),下面是该函数的示例代码Java 是否将给定日期转换为通用日期格式?,java,date,datetime,simpledateformat,Java,Date,Datetime,Simpledateformat,我必须获取一个输入日期并将其转换为通用日期格式。 为此,我创建了一个函数(不是泛型函数),下面是该函数的示例代码 public class ConvertTimestampFormat{ public void evaluate(String dateInString) { if (!StringUtils.isEmpty(dateInString)) { SimpleDateFormat formatter = new SimpleDateFo
public class ConvertTimestampFormat{
public void evaluate(String dateInString) {
if (!StringUtils.isEmpty(dateInString)) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm");
try {
Date date = formatter.parse(dateInString);
System.out.println(date);
System.out.println(formatter.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ConvertTimestampFormat obj = new ConvertTimestampFormat();
obj.evaluate("2014-06-14-12:58");
}
}
如果示例代码中有错误,请更正
这里我硬编码了输入日期格式2014-06-14-12:58
。在这里,我将获得不同类型的日期格式,如2014/06/14-12:58
,2014-Mar-14-12:58
(这样我现在将获得5到6种格式)。我考虑使用if-else检查格式,然后根据格式为每种格式编写单独的代码。但如果将来出现新的日期格式,它将失败
我的输出格式应始终为yyyy-MM-dd hh:MM:ss
请建议我使用通用方法(通用函数)来执行此操作。您给出了
SimpleDateFormat formatter = `new SimpleDateFormat("yyyy-MM-dd hh:mm")`;
因此,字符串应该类似于obj.evaluate(“2014-06-14 12:58”)代码>
硬编码字符串的格式应与您给出的
SimpleDateFormat formatter = `new SimpleDateFormat("yyyy-MM-dd hh:mm")`;
因此,字符串应该类似于obj.evaluate(“2014-06-14 12:58”)代码>
硬编码字符串的模式应与simpleDataFormat()中所述的模式完全相同。
有两种方法可以做到这一点。您要么提供带有日期的格式化程序字符串,要么硬编码并链接(非常难看)您想要使用的每种格式。我建议将链式解决方案分解为多种方法
解决方案1:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
public class ConvertTimestampFormat {
private SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
private Date dateObject;
public void evaluate(String dateString, String dateFormat) {
if (!StringUtils.isEmpty(dateString)) {
SimpleDateFormat inputFormat = new SimpleDateFormat(dateFormat);
try {
dateObject = inputFormat.parse(dateString);
} catch (ParseException e) {
//Parse failed. String does not match the formatter.
}
if(dateObject != null) {
System.out.println(outputFormat.format(dateObject));
}
}
}
public static void main(String[] args) {
ConvertTimestampFormat obj = new ConvertTimestampFormat();
obj.evaluate("2014-03-14-12:58", "yyyy-MM-dd-hh:mm");
obj.evaluate("2014-Mar-14-12:58", "yyyy-MMM-dd-hh:mm");
}
}
丑陋的解决方案:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
public class ConvertTimestampFormat {
private SimpleDateFormat inputFormat1 = new SimpleDateFormat("yyyy-MM-dd-hh:mm");
private SimpleDateFormat inputFormat2 = new SimpleDateFormat("yyyy-MMM-dd-hh:mm");
private SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
private Date dateObject;
public void evaluate(String dateInString) {
if (!StringUtils.isEmpty(dateInString)) {
try {
dateObject = inputFormat1.parse(dateInString);
} catch (ParseException e) {
try {
dateObject = inputFormat2.parse(dateInString);
} catch (ParseException e1) {
//String didn't match either formatters. You'll want to do something about this!
}
}
if(dateObject != null) {
System.out.println(outputFormat.format(dateObject));
}
}
}
public static void main(String[] args) {
ConvertTimestampFormat obj = new ConvertTimestampFormat();
obj.evaluate("2014-03-14-12:58");
obj.evaluate("2014-Mar-14-12:58");
}
}
有两种方法可以做到这一点。您要么提供带有日期的格式化程序字符串,要么硬编码并链接(非常难看)您想要使用的每种格式。我建议将链式解决方案分解为多种方法
解决方案1:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
public class ConvertTimestampFormat {
private SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
private Date dateObject;
public void evaluate(String dateString, String dateFormat) {
if (!StringUtils.isEmpty(dateString)) {
SimpleDateFormat inputFormat = new SimpleDateFormat(dateFormat);
try {
dateObject = inputFormat.parse(dateString);
} catch (ParseException e) {
//Parse failed. String does not match the formatter.
}
if(dateObject != null) {
System.out.println(outputFormat.format(dateObject));
}
}
}
public static void main(String[] args) {
ConvertTimestampFormat obj = new ConvertTimestampFormat();
obj.evaluate("2014-03-14-12:58", "yyyy-MM-dd-hh:mm");
obj.evaluate("2014-Mar-14-12:58", "yyyy-MMM-dd-hh:mm");
}
}
丑陋的解决方案:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
public class ConvertTimestampFormat {
private SimpleDateFormat inputFormat1 = new SimpleDateFormat("yyyy-MM-dd-hh:mm");
private SimpleDateFormat inputFormat2 = new SimpleDateFormat("yyyy-MMM-dd-hh:mm");
private SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
private Date dateObject;
public void evaluate(String dateInString) {
if (!StringUtils.isEmpty(dateInString)) {
try {
dateObject = inputFormat1.parse(dateInString);
} catch (ParseException e) {
try {
dateObject = inputFormat2.parse(dateInString);
} catch (ParseException e1) {
//String didn't match either formatters. You'll want to do something about this!
}
}
if(dateObject != null) {
System.out.println(outputFormat.format(dateObject));
}
}
}
public static void main(String[] args) {
ConvertTimestampFormat obj = new ConvertTimestampFormat();
obj.evaluate("2014-03-14-12:58");
obj.evaluate("2014-Mar-14-12:58");
}
}
目前,似乎没有任何“神奇”的方法来处理Java中所有可能的日期格式
正如另一个答案()中所建议的,您所能做的最好的事情如下:
private static final SimpleDateFormat[] FORMATTERS = new SimpleDateFormat[] {
new SimpleDateFormat("yyyy-MM-dd hh:mm"),
new SimpleDateFormat("yyyy/MM/dd-hh:mm"),
[...]};
private static Date parseDate(String dateInString) {
Date date = null;
for (int i = 0; i < FORMATTERS.length; i++) {
try {
date = FORMATTERS[i].parse(dateInString);
break;
} catch (ParseException e) {
// Nothing to do, try the next one
}
}
return date;
}
如果不能解析dateInString
而不是null
,我还添加了一些函数来处理结果的空值。目前,似乎没有任何“神奇”的方法来处理Java中所有可能的日期格式
正如另一个答案()中所建议的,您所能做的最好的事情如下:
private static final SimpleDateFormat[] FORMATTERS = new SimpleDateFormat[] {
new SimpleDateFormat("yyyy-MM-dd hh:mm"),
new SimpleDateFormat("yyyy/MM/dd-hh:mm"),
[...]};
private static Date parseDate(String dateInString) {
Date date = null;
for (int i = 0; i < FORMATTERS.length; i++) {
try {
date = FORMATTERS[i].parse(dateInString);
break;
} catch (ParseException e) {
// Nothing to do, try the next one
}
}
return date;
}
我还添加了一些来处理结果的空值,如果不能解析dateInString
,而不是null
,这就是。注意泛型,它在java世界中的意思是这样的List
,我想你的意思是灵活多于一般,不是吗?如果你有两种输入日期格式,那么每种类型都需要两个日期格式化程序。然后用第一个进行解析,捕捉异常,然后用第二个进行解析,如果在这里捕捉到异常,则输入与两个格式化程序都不匹配。@superbob我同意你的观点,它比泛型更为常见。@Daniel Tung同意两个格式化程序都不匹配。输入与两种格式不同。这里再次我需要添加格式,然后只有我会得到确切的结果。此外,我需要继续添加所有允许新格式的代码。是否有一种方法可以编写一个通用代码来接受所有可能的格式。请参阅我的答案,Java 8变体,您可以在格式化程序
阵列中添加所有建议的,因为Java 8。请小心使用通用代码,它在Java世界中的含义如下列表
,我想你的意思是灵活多于一般,不是吗?如果你有两种输入日期格式,那么每种类型都需要两个日期格式化程序。然后用第一个进行解析,捕捉异常,然后用第二个进行解析,如果在这里捕捉到异常,则输入与两个格式化程序都不匹配。@superbob我同意你的观点,它比泛型更为常见。@Daniel Tung同意两个格式化程序都不匹配。输入与两种格式不同。这里再次我需要添加格式,然后只有我会得到确切的结果。此外,我需要继续添加所有允许新格式的代码。有没有一种方法可以编写一个通用代码来接受所有可能的格式,您可以在格式化程序中添加自Java 8以来所有建议的array@Blip是的,这是我在问题中提到的错别字,这是示例代码。@Blip是的,这是我在问题中提到的错别字,这是示例代码。谢谢你的回答,我心里有这个解决方案,只是在寻找更好的解决方案,如果有。谢谢你的回答在我看来,这个解决方案只是在寻找更好的解决方案,如果有的话。