Java日期格式-GMT+;04:00
我必须解析以下日期 星期五9月30日18:31:00格林尼治标准时间+2016年4: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”表示: 可以根据基于周的年、年中的周和 星期几 我猜混合使用基于周的模式和绝对/纪元模式对于解析来说是不好
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();
}
}
}