Illegal instant due to time zone offset transition (Asia/Shanghai)_夏令时问题

项目报错信息:

Connot parse "1991-04-14",illegal instant due to time zone offset transition(Asia/Shanghai)

在网上查了一下说是由于夏令时问题引起了,那么什么是夏令时呢?

夏时制,夏时令(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。我国1986年4月中央颁布了相关政策, 1992年起,夏令时暂停实行。

夏令时开始:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时;

夏令时结束:直到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时。

具体时段:【1986-05-04(第一年特殊化)至1986-09-14, 1987-04-12至1987-09-13, 1988-04-10至1988-09-11, 1989-04-16至1989-09-17, 1990-04-15至1990-09-16, 1991-04-14至1991-09-15】。

夏令时对编程的影响: 有一些日期转换的类(org.joda.time包下的类)一碰到夏令时开始日期(1986-05-04,1987-04-12 ,1988-04-10,1989-04-16,1990-04-15,1991-04-14)就会报错

import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public static Date getBirthdayByIdCardNo(String IDCardNo) {
        Date birthday = null;
        if (StringUtils.isNotBlank(IDCardNo)) {
            int length = IDCardNo.length();
            if (length == 15 || length == 18) {
                String strBirthday = null;
                if (length == 18) {
                    //7—14位出生年月日
                    strBirthday = IDCardNo.substring(6, 14);
                } else {
                    //7-12位出生年月日,比如670401代表1967年4月1日
                    strBirthday = StringUtils.leftPad(IDCardNo.substring(6, 12), 8, "19");
                }                 //DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd");会报错
                //birthday = LocalDate.parse(strBirthday, formatter).toDate();会报错

          //SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//所有的日期转换都要经过Calendar类,所以是线程不安全的。

//date = df.parse("2008-08-08");

          birthday = DateUtils.parse(strBirthday, "yyyyMMdd");

}

        }
        return birthday;
    }
import java.util.Date;
import java.util.regex.Pattern;

import org.joda.time.DateTime;
public class DateUtils {

    public static final Pattern DATE_PATTERN = Pattern.compile("^\\d{4}-\\d{1,2}-\\d{1,2}$");

    public static Date parse(String time, String format) {
        return DateTimeUtils.toDate(DateTimeUtils.parse(time, format));
    }
}

import java.util.Date;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;

public class DateTimeUtils {

    public static Date toDate(DateTime dateTime){
        return dateTime == null ? null : dateTime.toDate();
    }

     public static DateTime parse(String time, String format) {
        if(StringUtils.isBlank(time)){
            return null;
        }
        return DateTime.parse(time,
                                         DateTimeFormat.forPattern(format));
    }

}



解决方案:

在启动类*Applation.java 中加入

System.setProperty("user.timezone", "Etc/GMT-8");

友情链接:https://my.oschina.net/u/3871554/blog/1859717(讲述为何使用joda 包而非SimpleDateFormat)

原文地址:https://www.cnblogs.com/j-liu3323/p/9809781.html

时间: 2024-10-14 21:37:01

Illegal instant due to time zone offset transition (Asia/Shanghai)_夏令时问题的相关文章

解决mysql设置时区时的错误Unknown or incorrect time zone: 'Asia/Shanghai'

Mysql默认时区格式是'+8:00'的格式,这个时区可以在my.ini中[mysqld]节点下设置 default-time-zone = '+8:00' 默认这个设置是没有的 但是mysql不支持'Asia/Shanghai'这种时区格式 执行下面sql语句是报错的 SET GLOBAL time_zone = 'Asia/Shanghai' 解决方法 到https://dev.mysql.com/downloads/timezones.html下载时区文件 如果你的mysql版本是5.7及

java中将RFC1123日期时间格式化

JDK8新的日期时间类转换方法: package com.example; import org.junit.Test; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; public class TestRFC1123 { String rfc1123Times[] = new String[]

Hue的安装与部署

Hue的安装与部署 hadoop hue Hue 简介 Hue是一个开源的Apache Hadoop UI系统,最早是由Cloudera Desktop演化而来,由Cloudera贡献给开源社区,它是基于Python Web框架Django实现的.通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job等等.很早以前就听说过Hue的便利与强大,一直没能亲自尝试使用,下面先通过官网给出的特性,通过翻译原文简单

RHCE之HTTPD+FTP+KickStart发布镜像,用于KVM的VM自动安装过程

最近在学习RHCE课程,上一篇简单的讲一下如何用HTTP来作为KVM的VM网络安装过程,请阅读:http://gshao.blog.51cto.com/3512873/1882093 今天讲到FTP+HTTP+KickStart发布,当然还有PXE安装RHEL(后续讲). 环境: 虚拟宿主机:RHEL 7.0 硬件:4vCPU+8G+40Gdisk IP地址:172.16.38.10 vnet ip地址:192.168.100.1 先截图上一篇装完rhel系统的样子: 回归到正文,今天讲HTTP

Hue集成Hadoop和Hive

一.环境准备 1.下载Hue:https://dl.dropboxusercontent.com/u/730827/hue/releases/3.12.0/hue-3.12.0.tgz 2.安装依赖 yum groupinstall -y "Development Tools" "Development Libraries" yum install -y apache-maven ant asciidoc cyrus-sasl-devel cyrus-sasl-gs

hadoop in hue的搭建(基于cdh版本)

首先官网下载tar包 http://archive.cloudera.com/cdh5/cdh/5/hue-3.9.0-cdh5.5.4.tar.gz 在安装hue之前,还需要安装各种依赖包,首先要检查是否有这些依赖包,mysql和mysql-devel已经在安装hive的时候有了 所以不必安装 添加mvn源 wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum

Hue的全局配置文件hue.ini(图文详解)

Hue版本:hue-3.9.0-cdh5.5.4 需要编译才能使用(联网) 说给大家的话:大家电脑的配置好的话,一定要安装cloudera manager.毕竟是一家人的.同时,我也亲身经历过,会有部分组件版本出现问题安装起来要个大半天时间去排除,做好心里准备.废话不多说,因为我目前读研,自己笔记本电脑最大8G,只能玩手动来练手.纯粹是为了给身边没高配且条件有限的学生党看的! 但我已经在实验室机器群里搭建好cloudera manager 以及 ambari都有. 大数据领域两大最主流集群管理工

CentOS6修改时区、日期、时间

CentOS6修改时区.日期.时间 一.时区 使用date命令查看时区 date --help 获取帮助 [[email protected] ~]# date -R Mon, 13 Aug 2018 11:10:04 +0800 [[email protected] ~]# date +%z +0800 #我们国家的东八区(+0800) 修改时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime hwclock -w  写入硬件,避免重启失

教你一步学会安装Hue

一.简介 hue是一个开源的apache hadoop ui系统,由cloudear desktop演化而来,最后cloudera公司将其贡献给了apache基金会的hadoop社区,它基于python框架django实现的. 通过使用hue,我们可以使用可视化的界面在web浏览器上与hadoop集群交互来分析处理数据,例如操作hdfs上的数据,运行MapReduce Job,查看HBase中的数据 二.安装 (1)下载 http://archive.cloudera.com/cdh5/cdh/