Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
日期为负数的Java字符串_Java_Date - Fatal编程技术网

日期为负数的Java字符串

日期为负数的Java字符串,java,date,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

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

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

您需要将时区添加到日期格式,并将格式更改为输入字符串(
/
而不是
-
):


请参阅文档:

行中有一个打字错误:

日期d=f.parse(“07/Mar/2004:16:56:39-0800”)

日期的格式为“dd-MMM-yyy: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();
    } 
查看此链接以了解有关SimpleDataFormat类的更多信息:

格式字符串应与输入匹配。特别是,分隔符必须匹配

此外,您的格式字符串缺少与
-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);
因为我在东部时区,所以显示:

太阳2004年3月7日19:56:39东部时间


但是,您应该改用新的
java.time

由于输入字符串有一个时区偏移,这意味着您应该使用一个:

输出为:


2004-03-07T16:56:39-08:00

这个
-
应该是
/
@luk2302我在回答的那一刻也看到了。你也需要设置合适的语言环境。@newToScala
SimpleDateFormat f=newsimpledateformat(“dd/MMM/yyyy:HH:mm:ss Z”,Locale.US)。您需要阅读文档。不要使用
SimpleDateFormat
,也不要使用
Date
。使用新的,而不是:
OffsetDateTime.parse(“07/Mar/2004:16:56:39-0800”,DateTimeFormatter.of模式(“dd/MMM/uuuu:HH:mm:ss Z”,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);
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);