我有这个值,
2011-11-19T00:00:00.000-03:00
需要转换并以此格式设置
YYYYMMDD
我试过这种方式
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class ParsedDate {
public static void main(String args[]) throws ParseException {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ",
Locale.US);
String s1 = "2011-11-19T00:00:00.000-03:00";
Date d = sdf.parse(s1);
String s2 = (new SimpleDateFormat("yyyyMMdd")).format(d);
System.out.println(s2);
}
}
但是它给了我
线程中的异常“main”java.text.ParseException:无法解析的日期:“2011-11-19T00:00:00.000-03:00”
有人可以帮帮我吗?
答案 0 :(得分:3)
尝试使用此
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS",
Locale.US);
String s1 = "2011-11-19T00:00:00.000-03:00";
Date d;
try
{
d = sdf.parse(s1);
String s2 = (new SimpleDateFormat("yyyyMMdd")).format(d);
System.out.println(s2);
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
请注意,我已删除 Z
答案 1 :(得分:0)
OffsetDateTime.parse( "2011-11-19T00:00:00.000-03:00" )
.format(
DateTimeFormatter.BASIC_ISO_DATE
)
20111119
现代方法使用 java.time 类。
将您的输入解析为OffsetDateTime
对象。
String input = "2011-11-19T00:00:00.000-03:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input ) ;
提取仅限日期的关注值,没有时间和没有时区。
LocalDate ld = odt.toLocalDate() ;
DateTimeFormatter
类提供了一个预定义的对象,其格式为BASIC_ISO_DATE
。这种特殊格式在官方称为标准ISO 8601格式的“基本”变体,其中基本'意味着最大限度地减少分隔符的使用。
String output = ld.format( DateTimeFormatter.BASIC_ISO_DATE ) ;
20111119
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。