当前位置: 首页 > news >正文

山东省建设厅举报网站哈尔滨做网站价格

山东省建设厅举报网站,哈尔滨做网站价格,企业网站做几个合适,淮南移动网站建设前言 日期使用问题主要是格式转换的问题 场景:通过excel导入数据,其中一个字段为出生日期,需要对字段值进行合法性校验 博客地址:芒果橙的个人博客 【http://mangocheng.com】 一、个人浅谈日期 时间日期作为一个基础的标识和维度…

前言

日期使用问题主要是格式转换的问题
场景:通过excel导入数据,其中一个字段为出生日期,需要对字段值进行合法性校验
博客地址:芒果橙的个人博客 【http://mangocheng.com】

一、个人浅谈日期

时间日期作为一个基础的标识和维度,基本上所有的业务都会涉及到,因此凡是涉及到业务的数据表,都可能会加上类似创建时间、操作时间的字段。在程序开发中,前端、后端、数据库在进行数据的传递过程中,对于时间的格式就存在要求,这部分也正是问题的触发点,即格式的转换。


二、日期格式转换遇到的问题

1. 场景:通过excel导入数据,其中一个字段为出生日期,需要对字段值进行合法性校验

2. 使用过程

1)使用SimpleDateFormat进行日期转化,如果抛出异常则说明填入的出生日期有误

1. 日期的分隔符不同

try {String birthDate = "2000-12-31";SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");format.parse(birthDate);System.out.println("日期正常");} catch (ParseException e) {System.out.println("日期格式有误");}
  • 输出:日期格式有误

  • 原因:格式不对,输入的分割符为 - ,转化的格式为 /

2. 非法日期

// 出生日期为12月32日
try {String birthDate = "2000-12-32".replaceAll("-","/");SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");format.parse(birthDate);System.out.println("日期正常");} catch (ParseException e) {System.out.println("日期格式有误");e.printStackTrace();}
  • 输出:日期正常
  • 原因:后面说明
  • 重点:虽然是12月32日,但并不会抛出异常,当时是很奇怪的,怎么会是正常的,但我没有多想,觉得是不是SimpleDateFormat本身的转化存在缺陷,于是我想着换另一个工具类

2)使用apache的org.apache.commons.lang3.time.DateUtils

  1. 非法日期
try {String birthDate = "2000-12-32".replaceAll("-", "");SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");org.apache.commons.lang3.time.DateUtils.parseDate(birthDate,"yyyyMMdd");System.out.println("日期正常");} catch (ParseException e) {System.out.println("日期格式有误");}
  • 输出:日期正常
  • 原因:与1相同
  • 我再次认为是本身工具类的问题,于是我选择了用公司封装的工具类

3)使用公司的日期工具类

  1. 非法日期
try {String birthDate = "2000-12-32";birthDate = DateUtils.formatDate(format.parse(birthDate));System.out.println("日期正常");} catch (ParseException e) {System.out.println("日期格式有误");}
  • 输出:日期格式有误
  • 原因:非法日期,没有12月32日
  • 用公司的工具类就正常,其他第三方的工具类反而有错,于是我搜索了下,终于明白了,原来日期转换有一个属性是lenient

3. 结论:lenient属性是关键

  1. lenient属性(默认为true):日期转换有一个属性是lenient——是否宽松转换(不严格解析),即如果输入的日期不合法,但能转换为日期,在不严格解析(lenient=true)时,不会抛出异常,而是会自动计算出一个新的日期(2000-12-32转换为2001-1-1)

  2. DateFormat源码:DateFormat.parse()

在这里插入图片描述

  1. 测试
  • 设置严格解析:lenient=false

    try {String birthDate = "2000-12-32".replaceAll("-","/");SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");// 严格解析format.setLenient(false);Date newDate = format.parse(birthDate);System.out.println("日期正常");System.out.println("转化后的日期:" + newDate);} catch (ParseException e) {System.out.println("日期格式有误");}
    
    • 输出:日期格式有误
  • SimpleDateFormat和org.apache.commons.lang3.time.DateUtils默认设置为不严格解析,而刚好公司的工具类使用的日期格式器是spring框架的DateFormatter,为严格解析

    • org.apache.commons.lang3.time.DateUtils
      在这里插入图片描述

    • spring框架的日期格式器类
      在这里插入图片描述

http://www.yayakq.cn/news/182255/

相关文章:

  • 阿里网站seo浏览不良网页的危害
  • 报考建设八大员官方网站宁夏枸杞网站建设方案
  • 十大网站平台网站关键词越多越好吗
  • 新塘网站seo优化如何将自己做的网站变成中文
  • 网站建设个人主页图linux 做网站数据库
  • 江西通威公路建设集团有限公司网站深圳网站建设制作优化
  • 深圳外贸网站公司南宁品牌网站建设
  • 17网站一起做网店广珠海教育局系统网站
  • 玉环市建设规划局网站wordpress主题大全
  • 网站源码修复杭州网络游戏公司排名
  • 高端婚纱摄影网站html制作新闻页面代码
  • 模板网站怎么用接go语言网站开发
  • 网站如何去分析大学校园网站建设的
  • 电脑版网站转手机版怎么做个人网站建站系统
  • 智能建站源码百度域名怎么注册
  • 网站设置为默认主页慈城旅游网站建设策划书
  • 深圳市住房和建设局网站住房保障网站分类有哪几类
  • 免费做初级会计试题网站有哪些asp做微网站设计
  • 网站进不去怎么解决做汽车价格的网站建设
  • 做播放器电影网站需要多少钱6口碑好的网站定制公司
  • 常州哪有做网站wordpress 登录后跳转
  • 个人网站备案需要多久做网站年入百万
  • 开发国外优惠卷网站如何做推广seo主管招聘
  • 公司企业网站模板wordpress 后台登陆美化
  • 三只松鼠的网站建设wechat下载app
  • 火车头采集做网站赚钱配送系统网站怎么做
  • 河南省级住房城乡建设主管部门网站企业邮箱申请哪个
  • 建设信用卡银行积分商城网站公司注册在上海的好处
  • 成都商报官方网站网站地区分站系统
  • 网站开发哪种语言最好安装app软件