解决方案:记录一下Date类型在传值时遇见的若干坑(String类型转为Date类型、mysql的表设置、UTC的设置)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 解决方案:记录一下Date类型在传值时遇见的若干坑(String类型转为Date类型、mysql的表设置、UTC的设置)


将String类型转化为Date类型

在实际开发中,偶尔会碰见需要将类似“2012-02-09”的日期字符串类型转化为Data日期类型。

我们使用SimpleDateFormat首先指定日期类型,然后使用parse进行转换:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date mydate = new Date();
        try{
            mydate =  sdf.parse(mystr);
        }catch (ParseException e){
            e.printStackTrace();
            System.out.println("字符转换为Date类型时失败");
        }

封装后可以直接调用:

public class Tools {
    public static Date String2Date(String mystr){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date mydate = new Date();
        try{
            mydate =  sdf.parse(mystr);
        }catch (ParseException e){
            e.printStackTrace();
            System.out.println("字符转换为Date类型时失败");
        }
        return mydate;
    }
}
//使用的时候:
String userBirth = "2012-02-09"
Date userBirthDate = Tools.String2Date(userBirth);

sql.date和util.date的区别

1、util.date是sql.date的父类,sql.date一般只用于数据库,util.date还可以用于其他地方。

2、sql.date的时间格式,只有“年-月-日”部分,没有时间部分

3、如果在项目中选择了其中的一种,就不要乱改了,统一用sql.date或者util.date,我一般使用util.date。

mysql表的设置

在这里插入图片描述

mysql表中有两种类型,date和datetime。

他们的区别是:

date类型可用于需要一个日期而不需要时间的部分,YYYY-MM-DD,如2012-02-02、1592-06-02

datetime类型可用于需要同时包含日期和时间的信息的值,YYYY-MM-DD HH:mm:ss,如:2012-02-02 12:25:12

存入数据库少一天的问题

在开发中,遇到了前端传过来的值是“2012-02-09”,且已经成功转换为date类型,但在传入数据库中,发现无论怎么传数据库内存储都会少一天,比如2012-02-09存入后变成2012-02-08。

这是因为驱动连接时,定义了serverTimezone=UTC,在编译器编译相关sql指令时,会先以UTC时区进行存储,发送到MySQL,然后MySQL以本地时区进行转换,就会导致时间会发生改变。

不推荐在代码中先加一天再存入数据库的方法

推荐的是:将属性设置为serverTimezone=Asia/Shanghai

完整的url是:url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai

什么是UTC

UTC,简称世界统一时间,跟北京时间相比,比北京早8个小时,也就是说,北京2020年3月20日18点的时候,UTC时间为2020年3月20日10点

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
数据可视化 Java
让星星月亮告诉你,通过反射创建类的实例对象,并通过Unsafe theUnsafe来修改实例对象的私有的String类型的成员属性的值
本文介绍了如何使用 Unsafe 类通过反射机制修改对象的私有属性值。主要包括: 1. 获取 Unsafe 的 theUnsafe 属性:通过反射获取 Unsafe类的私有静态属性theUnsafe,并放开其访问权限,以便后续操作 2. 利用反射创建 User 类的实例对象:通过反射创建User类的实例对象,并定义预期值 3. 利用反射获取实例对象的name属性并修改:通过反射获取 User类实例对象的私有属性name,使用 Unsafe`的compareAndSwapObject方法直接在内存地址上修改属性值 核心代码展示了详细的步骤和逻辑,确保了对私有属性的修改不受 JVM 访问权限的限制
76 4
|
3月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
39 3
|
5月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何将STRING类型转换为DATETIME类型
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
存储 NoSQL 索引
MPP架构数据仓库使用问题之在ORC文件中,String类型字段是怎么进行编码的
MPP架构数据仓库使用问题之在ORC文件中,String类型字段是怎么进行编码的
|
5月前
|
开发工具 数据安全/隐私保护
【Azure Developer】使用MSAL4J 与 ADAL4J 的SDK时候,遇见了类型冲突问题 "java.util.Collections$SingletonList cannot be cast to java.lang.String"
【Azure Developer】使用MSAL4J 与 ADAL4J 的SDK时候,遇见了类型冲突问题 "java.util.Collections$SingletonList cannot be cast to java.lang.String"
123 0
|
5月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
61 0
|
6月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
6月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
27天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
55 3
|
27天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
63 3