Java 如何将不明确的字符串解析为日期?
我试图找出一种将字符串解析为日期对象的“简单”方法 字符串可以是yyyyMMdd、yyyyMMddHHmm或yyyyymmddhhmms 目前,我正在查看字符串的长度,并根据长度创建DateParser。有没有更优雅的方法来实现这一点?我会使用一个类,并根据字符串的长度填充格式模式。除非有一天你有同样长度的琴弦,否则那就行了 使用问题中的示例: 2011年7月11日:Java 如何将不明确的字符串解析为日期?,java,string,parsing,date,Java,String,Parsing,Date,我试图找出一种将字符串解析为日期对象的“简单”方法 字符串可以是yyyyMMdd、yyyyMMddHHmm或yyyyymmddhhmms 目前,我正在查看字符串的长度,并根据长度创建DateParser。有没有更优雅的方法来实现这一点?我会使用一个类,并根据字符串的长度填充格式模式。除非有一天你有同样长度的琴弦,否则那就行了 使用问题中的示例: 2011年7月11日: SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Date parsedDate = dateFormat.parse("20110711");
格式2011年7月11日1340小时:
dateFormat = new SimpleDateFormat("yyyyMMddHHmm");
parsedDate = dateFormat.parse("201107111340");
格式2011年7月11日1340小时10秒:(注意,小s代表秒,大写s代表毫秒!)
有关格式样式字母的完整列表,请参见超链接 您可以使用DateFormatter从字符串中解析日期
import java.util.*;
import java.text.*;
public class StringToDate
{
public static void main(String[] args)
{
try
{
String str_date="11-June-07";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd");
date = (Date)formatter.parse(str_date);
}
catch (ParseException e)
{
System.out.println("Exception :"+e);
}
}
}
您可以根据自己的需要随意更改模式。我会像您一样,查看字符串的长度,并创建适当的实例
SimpleDateFormat getFormatFor( String dateString ){
if ( dateString.length() == 8 ) return new SimpleDateFormat("yyyyMMdd");
if ( dateString.length() == 14 ) return new SimpleDateFormat("yyyyMMddHHmmss");
// you got a bad input...
}
注意:这些不是线程安全的,所以每次都应该创建一个新的。您仍然可以使用“专用”解析器(如您所建议的)并链接它们:
例如,您仍然可以有一个DateHourMinSecParser
(对于yyyymmddhhms
),一个DateHourMinParser
(对于yyyyMMddHHmm
)和一个DateParser
),它们都实现了相同的接口:
public interface GenericDateParser {
Date parseDate(String input) throws IllegalArgumentException;
}
e、 g
但这些类中的每一个实际上都会使用另一个GenericDateParser的一个参数——其思想是,每个解析器都会首先尝试解析日期本身,如果解析(或一些内部检查,例如字符串长度)失败,它会将其传递给链中的下一个解析器,直到链中没有其他解析器为止(在这种情况下,它将抛出一个异常,或者链中的一个成员将返回一个值):
您将初始化它们:
GenericDateParser p = new DateHourMinSecParser( new DateHourMinParser(new DateParser(null)) );
然后只需使用最高级的一个:
Date d = p.parse( '20110126' );
或者可以用零填充字符串:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmSS") {
@Override
public Date parse(String s) throws ParseException {
return super.parse((s + "000000").substring(0, 14));
}
};
System.out.println(sdf.format(sdf.parse("20110711182405")));
System.out.println(sdf.format(sdf.parse("201107111824")));
System.out.println(sdf.format(sdf.parse("20110711")));
类似的问题您能提供一个例子吗?代码应该是什么样的?
newsimpledateformat(“YYYYMMDD”)
或`newsimpledateformat(“YYYYMMDDHHMMSS”)?
GenericDateParser p = new DateHourMinSecParser( new DateHourMinParser(new DateParser(null)) );
Date d = p.parse( '20110126' );
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmSS") {
@Override
public Date parse(String s) throws ParseException {
return super.parse((s + "000000").substring(0, 14));
}
};
System.out.println(sdf.format(sdf.parse("20110711182405")));
System.out.println(sdf.format(sdf.parse("201107111824")));
System.out.println(sdf.format(sdf.parse("20110711")));