迄今为止使用负数

时间:2017-08-13 16:39:18

标签: java date

我正在尝试转换格式的日期

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());

3 个答案:

答案 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