百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

玩转MySQL的时间类型:Date、DateTime、TimeStamp、Time

bigegpt 2025-02-21 12:18 10 浏览

Mysql时间类型介绍

在MySQL中,有四种不同的时间类型:DATE、DATETIME、TIMESTAMP和TIME。它们分别表示不同精度和范围的时间。

  1. DATE类型

DATE类型用于存储日期,格式为'YYYY-MM-DD'。它存储年、月、日,但不存储时间。例如,'2023-04-19'就是一个DATE类型的值。

  1. DATETIME类型

DATETIME类型用于存储日期和时间,格式为'YYYY-MM-DD HH:MM:SS'。它存储年、月、日、小时、分钟和秒。例如,'2023-04-19 13:30:45'就是一个DATETIME类型的值。

  1. TIMESTAMP类型

TIMESTAMP类型用于存储日期和时间,格式为'YYYY-MM-DD HH:MM:SS'。它与DATETIME类型的区别在于,TIMESTAMP类型存储的时间范围只能是从'1970-01-01 00:00:01'到'2038-01-19 03:14:07',而且它存储的时间是相对于当前时区的UTC时间。例如,如果当前时区是北京时间,那么存储'2023-04-19 13:30:45'的TIMESTAMP类型的值实际上是'2023-04-19 05:30:45'。由于存储的时间是相对于UTC时间的,因此在不同的时区中读取该值时,会根据当前时区自动转换为对应的本地时间。

  1. TIME类型

TIME类型用于存储时间,格式为'HH:MM:SS'。它存储小时、分钟和秒,但不存储日期。例如,'13:30:45'就是一个TIME类型的值。

总的来说,四种时间类型的区别在于它们存储的精度和范围不同。DATE类型只存储日期,DATETIME类型存储日期和时间,TIMESTAMP类型存储日期和时间并且有时间范围限制,而TIME类型只存储时间。

这几种时间类型怎么相互转换呢?

在MySQL中,可以使用函数将不同类型的时间值进行转换。

  1. DATE转换为DATETIME

可以使用DATE函数将DATE类型的值转换为DATETIME类型的值。例如:

SELECT DATE('2023-04-19 00:00:00');

输出结果为'2023-04-19 00:00:00',这就是将'2023-04-19'这个DATE类型的值转换为DATETIME类型的值。

  1. DATETIME转换为DATE或TIME

可以使用DATE函数或TIME函数将DATETIME类型的值转换为DATE类型或TIME类型的值。例如:

SELECT DATE('2023-04-19 13:30:45');
SELECT TIME('2023-04-19 13:30:45');

输出结果分别为'2023-04-19'和'13:30:45',这就是将'2023-04-19 13:30:45'这个DATETIME类型的值转换为DATE类型和TIME类型的值。

  1. TIMESTAMP转换为DATETIME或DATE

可以使用FROM_UNIXTIME函数将TIMESTAMP类型的值转换为DATETIME类型或DATE类型的值。例如:

SELECT FROM_UNIXTIME(1647731405);

输出结果为'2022-03-18 08:30:05',这就是将1647731405这个TIMESTAMP类型的值转换为DATETIME类型的值。如果只想转换为DATE类型的值,可以在函数中添加第二个参数'%Y-%m-%d'。例如:

SELECT FROM_UNIXTIME(1647731405, '%Y-%m-%d');

输出结果为'2022-03-18',这就是将1647731405这个TIMESTAMP类型的值转换为DATE类型的值。

  1. DATE、DATETIME、TIME转换为TIMESTAMP

可以使用UNIX_TIMESTAMP函数将DATE类型、DATETIME类型和TIME类型的值转换为TIMESTAMP类型的值。例如:

SELECT UNIX_TIMESTAMP('2023-04-19');
SELECT UNIX_TIMESTAMP('2023-04-19 13:30:45');
SELECT UNIX_TIMESTAMP('13:30:45');

输出结果分别为'1681574400'、'1681621845'和'50745',这就是将'2023-04-19'、'2023-04-19 13:30:45'和'13:30:45'这些时间类型的值转换为TIMESTAMP类型的值。

需要注意的是,在进行时间类型的转换时,可能会存在精度损失或溢出等问题,需要根据具体情况进行处理。

java代码怎么读取这几种格式呢

在Java中,可以使用java.sql.Timestamp、java.sql.Date和java.sql.Time类来处理MySQL中的DATETIME、DATE和TIME类型的值。

  1. 读取DATETIME类型的值

使用ResultSet对象的getTimestamp方法来读取DATETIME类型的值,例如:

ResultSet rs = statement.executeQuery("SELECT datetime_col FROM table_name");
while (rs.next()) {
    Timestamp datetimeValue = rs.getTimestamp("datetime_col");
    // 处理读取到的值
}
  1. 读取DATE类型的值

使用ResultSet对象的getDate方法来读取DATE类型的值,例如:

ResultSet rs = statement.executeQuery("SELECT date_col FROM table_name");
while (rs.next()) {
    Date dateValue = rs.getDate("date_col");
    // 处理读取到的值
}
  1. 读取TIME类型的值

使用ResultSet对象的getTime方法来读取TIME类型的值,例如:

ResultSet rs = statement.executeQuery("SELECT time_col FROM table_name");
while (rs.next()) {
    Time timeValue = rs.getTime("time_col");
    // 处理读取到的值
}

需要注意的是,在进行时间类型的读取时,需要确保数据库中的时间值已经正确地映射到Java的时间类型上,同时需要根据具体情况来选择使用合适的时间类型。

  1. 读取TIMESTAMP类型的值:

在Java中,可以使用java.sql.Timestamp类来处理MySQL中的TIMESTAMP类型的值。在读取TIMESTAMP类型的值时,可以使用ResultSet对象的getTimestamp方法,例如:

ResultSet rs = statement.executeQuery("SELECT timestamp_col FROM table_name");
while (rs.next()) {
    Timestamp timestampValue = rs.getTimestamp("timestamp_col");
    // 处理读取到的值
}

需要注意的是,getTimestamp方法返回的是java.sql.Timestamp类型的值,其精度为毫秒级别。如果需要精确到纳秒,可以使用getObject方法,并将其转换为java.time.LocalDateTime类型,例如:

ResultSet rs = statement.executeQuery("SELECT timestamp_col FROM table_name");
while (rs.next()) {
    Object timestampValue = rs.getObject("timestamp_col");
    if (timestampValue instanceof java.time.LocalDateTime) {
        java.time.LocalDateTime localDateTimeValue = (java.time.LocalDateTime) timestampValue;
        // 处理读取到的值
    }
}

需要注意的是,在进行时间类型的读取时,需要确保数据库中的时间值已经正确地映射到Java的时间类型上。此外,MySQL中的TIMESTAMP类型默认的时区为当前服务器的时区,如果需要在不同的时区之间进行转换,需要进行额外的处理。

总体来说,区别就是时间精度一样。

相关推荐

Linux 系统启动完整流程

一、启动系统流程简介如上图,简述系统启动的大概流程:1:硬件引导UEFi或BIOS初始化,运行POST开机自检2:grub2引导阶段系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器GRU...

超专业解析!10分钟带你搞懂Linux中直接I/O原理

我们先看一张图:这张图大体上描述了Linux系统上,应用程序对磁盘上的文件进行读写时,从上到下经历了哪些事情。这篇文章就以这张图为基础,介绍Linux在I/O上做了哪些事情。文件系统什么是...

linux入门系列12--磁盘管理之分区、格式化与挂载

前面系列文章讲解了VI编辑器、常用命令、防火墙及网络服务管理,本篇将讲解磁盘管理相关知识。本文将会介绍大量的Linux命令,其中有一部分在“linux入门系列5--新手必会的linux命令”一文中已经...

Linux环境下如何设置多个交叉编译工具链?

常见的Linux操作系统都可以通过包管理器安装交叉编译工具链,比如Ubuntu环境下使用如下命令安装gcc交叉编译器:sudoapt-getinstallgcc-arm-linux-gnueab...

可算是有文章,把Linux零拷贝技术讲透彻了

阅读本文大概需要6.0分钟。作者:卡巴拉的树链接:https://dwz.cn/BaQWWtmh本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念...

linux软链接的创建、删除和更新

大家都知道,有的时候,我们为了省下空间,都会使用链接的方式来进行引用操作。同样的,在系统级别也有。在Windows系列中,我们称其为快捷方式,在Linux中我们称其为链接(基本上都差不多了,其中可能...

Linux 中最容易被黑客动手脚的关键目录

在Linux系统中,黑客攻击后常会针对关键目录和文件进行修改以实现持久化、提权或隐藏恶意活动。本文介绍下黑客最常修改的目录及其手法。一、/etc目录关键文件有:/etc/passwd和/et...

linux之间传文件命令之Rsync傻瓜式教程

1.前言linux之间传文件命令用什么命令?本文介绍一种最常用,也是功能强大的文件同步和传输工具Rsync,本文提供详细傻瓜式教程。在本教程中,我们将通过实际使用案例和最常见的rsync选项的详细说...

Linux下删除目录符号链接的方法

技术背景在Linux系统中,符号链接(symlink)是一种特殊的文件,它指向另一个文件或目录。有时候,我们可能需要删除符号链接,但保留其指向的目标目录。然而,在删除符号链接时可能会遇到一些问题,例如...

阿里云国际站注册教程:aa云服务器怎么远程链接?

在全球化的今天,互联网带给我们无以计数的便利,而云服务器则是其中的重要基础设施之一。这篇文章将围绕阿里云国际站注册、aa云服务器如何远程链接,以及服务器安全防护如Ddos防火墙、网站应用防护waf防火...

Linux 5.16 网络子系统大范围升级 多个新适配器驱动加入

Linux在数据中心中占主导地位,因此每个内核升级周期的网络子系统变化仍然相当活跃。Linux5.16也不例外,周一最新与网络相关的更新加入了大量的驱动和新规范的支持。一个较新硬件的驱动是Realt...

搭建局域网文件共享服务(Samba),手机电脑都能看喜欢的影视剧

作为一名影视爱好者,为了方便地观看自己喜欢的影视作品,在家里搞一个专门用来存放电影的服务器是有必要的。蚁哥选则用一台Ubuntu系统的电脑做为服务器,共享影音文件,其他同一个局域网内的电脑或手机可以...

分享一个实用脚本—centos7系统巡检

概述这周闲得慌,就根据需求写了差不多20个脚本(部分是之前分享过的做了一些改进),今天主要分享一个给平时运维人员用的centos7系统巡检的脚本,或者排查问题检查系统情况也可以用..实用脚本#!/bi...

Linux 中创建符号链接的方法

技术背景在Linux系统里,符号链接(SymbolicLink),也被叫做软链接(SoftLink),是一种特殊的文件,它指向另一个文件或者目录。符号链接为文件和目录的管理带来了极大的便利,比...

一文掌握 Linux 符号链接

符号链接(SymbolicLink),通常被称为“软链接”,是Linux文件系统中一种强大而灵活的工具。它允许用户创建指向文件或目录的“快捷方式”,不仅简化了文件管理,还在系统配置、软件开发和日...