Java日期格式-GMT+;04:00

Java日期格式-GMT+;04:00,java,simpledateformat,datetime-parsing,Java,Simpledateformat,Datetime Parsing,我必须解析以下日期 星期五9月30日18:31:00格林尼治标准时间+2016年4:00 并且它不使用以下模式: newsimpledateformat(“EEE-MMM-dd-HH:mm:ss-z-YYYY”,Locale.ENGLISH) 我将以下日期作为输出:Fri Jan 01 18:31:00 GMT+04:00 2016 你能告诉我我做错了什么吗?应该是小写的“y”: 大写“Y”表示: 可以根据基于周的年、年中的周和 星期几 我猜混合使用基于周的模式和绝对/纪元模式对于解析来说是不好

我必须解析以下日期

星期五9月30日18:31:00格林尼治标准时间+2016年4:00

并且它不使用以下模式:

newsimpledateformat(“EEE-MMM-dd-HH:mm:ss-z-YYYY”,Locale.ENGLISH)

我将以下日期作为输出:Fri Jan 01 18:31:00 GMT+04:00 2016

你能告诉我我做错了什么吗?

应该是小写的“y”:

大写“Y”表示:

可以根据基于周的年、年中的周和 星期几


我猜混合使用基于周的模式和绝对/纪元模式对于解析来说是不好的

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class ParseDate {


public static void main(String[] args) {
    try {
        SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
        Date date = parserSDF.parse("Fri Sep 30 18:31:00 GMT+04:00 2016");
        System.out.println("date: " + date.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
}
}
tl;博士
OffsetDateTime
作语法分析
(
“9月30日星期五18:31:00 GMT+2016年4:00”,
模式的DateTimeFormatter.(“EEE MMM d HH:mm:ss O uuuu”,Locale.US)
)
.toString()
2016-09-30T18:31+04:00

避免遗留类 其他答案现在已经过时了。可怕的
Date
Calendar
SimpleDateFormat
类现在是遗留类,多年前被JSR 310中定义的现代java.time类所取代

java.time 您的输入字符串在UTC偏移量的上下文中表示日期和时间。偏移量是在基线之前或之后的小时数。对于此类信息,请使用
OffsetDateTime
class

请注意,与UTC的偏移不是时区。时区是特定地区人民使用的偏移量的过去、现在和未来变化的历史

该类将替换
SimpleDataFormat
。格式代码类似,但不完全相同。因此,请仔细研究Javadoc

请注意,我们传递了一个
区域设置
。这将指定解析输入时要使用的人类语言和文化规范,例如月份名称、星期天名称、标点符号、大小写等

package work.basil.example.datetime;
导入java.time.OffsetDateTime;
导入java.time.format.DateTimeFormatter;
导入java.util.Locale;
公共类解析
{
公共静态void main(字符串[]args)
{
解析应用程序=新建解析();
app.demo();
}
私有void演示()
{
字符串输入=“Fri Sep 30 18:31:00 GMT+04:00 2016”;
DateTimeFormatter f=模式的DateTimeFormatter.(“EEE MMM d HH:mm:ss O uuuu”,Locale.US);
OffsetDateTime odt=OffsetDateTime.parse(输入,f);
System.out.println(“odt=“+odt”);
}
}

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

该项目现已启动,建议迁移到类

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类。Hibernate5和JPA2.2支持java.time

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • 带来了一些小功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • Android(26+)的更高版本捆绑了java.time类的实现

    • 对于早期的Android(您得到了什么输出/错误?我没有得到任何错误,但我得到了以下输出日期:Fri Jan 01 18:31:00 GMT+04:00 2016FYI,
      SimpleDateFormat
      现在是遗留的,被JSR 310中定义的java.time类所取代。谢谢)是的,这就是问题所在
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      import java.util.Locale;
      
      public class ParseDate {
      
      
      public static void main(String[] args) {
          try {
              SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
              Date date = parserSDF.parse("Fri Sep 30 18:31:00 GMT+04:00 2016");
              System.out.println("date: " + date.toString());
          } catch (ParseException ex) {
              ex.printStackTrace();
          }
      }
      }