我正在尝试转换格式的日期
07/Mar/2004:16:56:39 -0800
到日期对象。我不确定该格式的名称是什么,但它在tomcat访问日志中使用。有人可以帮帮我吗?
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy:HH:mm:ss");
Date d = f.parse("07/Mar/2004:16:56:39 -0800"); // Throws exception.
System.out.println(d.getTime());
答案 0 :(得分:2)
格式字符串应与输入匹配。特别是,分隔符必须匹配。
此外,您的格式字符串缺少与-0800
匹配的时区部分。
由于您的输入使用英文月份名称,因此您应明确指定,例如使用Locale.US
。
SimpleDateFormat f = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.US);
Date d = f.parse("07/Mar/2004:16:56:39 -0800");
System.out.println(d);
因为我在东部时区,打印:
Sun Mar 07 19:56:39 EST 2004
但是,您应该使用新的java.time
类。
由于输入字符串具有时区偏移量,这意味着您应使用OffsetDateTime
将字符串解析为DateTimeFormatter
:
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MMM/uuuu:HH:mm:ss Z", Locale.US);
OffsetDateTime dt = OffsetDateTime.parse("07/Mar/2004:16:56:39 -0800", f);
System.out.println(dt);
输出是:
2004-03-07T16:56:39-08:00
答案 1 :(得分:0)
您需要将时区添加到日期格式,并将格式更改为输入字符串(/
而不是-
):
SimpleDateFormat f = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.US);
请参阅文档:https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
答案 2 :(得分:-1)
你的行中有一个拼写错误:
Date d = f.parse("07/Mar/2004:16:56:39 -0800");
日期格式为“dd-MMM-yyyy:HH:mm:ss”。您需要将“/”替换为“ - ”。此外,您需要使用try-catch块包围您的解析函数,如下所示:
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy:HH:mm:ss");
Date d;
try {
d = f.parse("07-Mar-2004:16:56:39");
System.out.println(d.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
查看此链接以了解有关SimpleDateFormat类的更多信息: http://www.xyzws.com/javafaq/how-to-use-simpledateformat-class-formating-parsing-date-and-time/142