我正在尝试获取一个文本框字段(由字符串 wkCreation
字段表示)并将数据转换为“YYYY-MM-DD”格式的日期字段。这是我现在使用 SimpleDateFormat
的代码:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
Date convertdate = format.parse(wkCreation);
wkCreationFormat = format.format(convertdate) ;
System.out.println("Convertdate field = " + convertdate);
System.out.println("Creation Format field = " + wkCreationFormat);
}
catch (ParseException e) {
e.printStackTrace();
}
如果用户输入的日期实际上与 SimpleDateFormat
模式的格式相同,这似乎是我可以让它工作的唯一方法,这确实违背了我的目的。我试图将“mm/dd/yy”或“mm/dd/yyyy”格式的内容转换为“YYYY-MM-DD”格式。除了 Java 常识之外,我还想念她什么?我认为我对 convertdate
的定义是错误的,但不知道
最佳答案
SimpleDateFormat的目的是将String转换为Date,这并不像你想象的那么容易。如果我有日期01/02/2015
,你怎么知道它是 2 月 1 日或 1 月 2 日。答案是,您不知道,您需要额外的提示(输入)来进行正确的转换 - 格式。
您可以编写自己的格式,它可以支持多种格式,例如类似于:
package q34776322;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class MultiDateFormat {
String[] supportedFormats;
public MultiDateFormat(String... formats) {
supportedFormats = Arrays.copyOf(formats, formats.length);
}
public Date parse(String dateString) {
Date foundDate = null;
for (String format : supportedFormats) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
Date tmp = sdf.parse(dateString);
if (foundDate != null) {
// correct parsing, but it was at parsed before => error
throw new IllegalArgumentException("Unparsable date: '" + dateString + "' (multiple pattern matches)");
} else {
foundDate = tmp;
}
} catch (ParseException pe) {
}
}
if (foundDate == null) {
throw new IllegalArgumentException("Unparsable date: '" + dateString + "' (no pattern match)");
}
return foundDate;
}
public static void main(String[] args) {
MultiDateFormat mdf = new MultiDateFormat("yyyy-MM-dd", "dd/MM/yyyy");
mdf.parse("2015-02-01"); // February 1st
mdf.parse("01/02/2015"); // February 1st again
mdf = new MultiDateFormat("MM/dd/yyyy", "dd/MM/yyyy");
try {
mdf.parse("01/02/2015");
} catch (Exception e) {
System.out.println("Expected exception");
}
}
}
这基本上是尝试所有格式 - 如果没有适合或有多个适合,则会抛出异常......
关于java - 转换字符串值时对使用 SimpleDateFormat 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34776322/