javastring时间转date_Java8中字符串时间转Date与
LocalDateT。。。
当⽤Java8的⽇期类LocalDateTime和DateTimeFormatter处理String型的⽇期类型yyyy-MM时出现了问题:
java.time.format.DateTimeParseException: Text ‘2019.04.30’could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor,原来LocalDateTime.parse()⽅法只能转换精确到时间的字符串。LocalDateTime是LocalDate和LocalTime的结合,LocalDate是⽇期,⽽LocalTime是时间,所以LocalDateTime只能是⽇期和时间。
正确的:yyyy-MM-dd HH时mm分ss秒
//定义⼀个任意格式的⽇期、l讨间字符串
Stringstrl="2019-04-12 O1时06分09秒";
//根据需要解析的⽇期、时间字符串定义解析所⽤的格式器
DateTimeFormatterfomatterl=DateTimeFormatter.ofPattern("yyyy-MM-dd HH时mm分ss秒");
string转date的方法//执⾏解析
LocalDateTimedtl=LocalDateTime.parse(strl,fomatterl);
会出现问题的yyyy-MM
//定义⼀个任意格式的⽇期、l讨间字符串
Stringstrl="2014-04";
//根据需要解析的⽇期、时间字符串定义解析所⽤的格式器
DateTimeFormatterfomatterl=DateTimeFormatter.ofPattern("yyyy-MM");
//执⾏解析
LocalDateTimedtl=LocalDateTime.parse(strl,fomatterl);
那我们怎么把yyyy-MM格式的字符串转成LocalDateTime呢?
我们可以转成Data,然后 Date与LocalDateTime、LocalDate、LocalTime互转
Java 8中 java.util.Date 类新增了两个⽅法,分别是from(Instant instant)和toInstant()⽅法
// Obtains an instance of Date from an Instant object.
publicstaticDatefrom(Instantinstant){
try{
EpochMilli());
}catch(ArithmeticExceptionex){
thrownewIllegalArgumentException(ex);
}
}
// Converts this Date object to an Instant.
publicInstanttoInstant(){
returnInstant.ofEpochMilli(getTime());
}
这两个⽅法使我们可以⽅便的实现将旧的⽇期类转换为新的⽇期类,具体思路都是通过Instant当中介,然后通过Instant来创建LocalDateTime(这个类可以很容易获取LocalDate和LocalTime),新的⽇期类转旧的也是如此,将新的先转成LocalDateTime,然后获取Instant,接着转成Date,具体实现细节如下:
string转成Date
//字符串转换成Date
Stringstr="2019-03-23";
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
Datedata=sdf.parse(str);
01. java.util.Date 转成 java.time.LocalDateTime
publicvoidUDateToLocalDateTime(){
java.util.Datedate=newjava.util.Date();
Instant();
ZoneIdzone=ZoneId.systemDefault();
LocalDateTimelocalDateTime=LocalDateTime.ofInstant(instant,zone);
}
02. java.util.Date 转成 java.time.LocalDate
publicvoidUDateToLocalDate(){
java.util.Datedate=newjava.util.Date();
Instant();
ZoneIdzone=ZoneId.systemDefault();
LocalDateTimelocalDateTime=LocalDateTime.ofInstant(instant,zone);
LocalDate();
}
03. java.util.Date 转成 java.time.LocalTime
publicvoidUDateToLocalTime(){
java.util.Datedate=newjava.util.Date();
Instant();
ZoneIdzone=ZoneId.systemDefault();
LocalDateTimelocalDateTime=LocalDateTime.ofInstant(instant,zone);
LocalTime();
}
04. java.time.LocalDateTime 转成 java.util.Date
publicvoidLocalDateTimeToUdate(){
w();
ZoneIdzone=ZoneId.systemDefault();
Instantinstant=localDateTime.atZone(zone).toInstant();
java.util.Datedate=Date.from(instant);
}
05. java.time.LocalDate 转成 java.util.Date publicvoidLocalDateToUdate(){
w();
ZoneIdzone=ZoneId.systemDefault();
Instantinstant=localDate.atStartOfDay().atZone(zone).toInstant(); java.util.Datedate=Date.from(instant);
}
6. java.time.LocalTime 转成 java.util.Date publicvoidLocalTimeToUdate(){
w();
w();
LocalDateTimelocalDateTime=LocalDateTime.of(localDate,localTime); ZoneIdzone=ZoneId.systemDefault();
Instantinstant=localDateTime.atZone(zone).toInstant();
java.util.Datedate=Date.from(instant);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论