在本文中,我们将带你了解来自日期时间的MySQL剥离时间组件在这篇文章中,我们将为您详细介绍来自日期时间的MySQL剥离时间组件的方方面面,并解答来自日期时间的mysql剥离时间组件是什么常见的疑惑,
在本文中,我们将带你了解来自日期时间的MySQL剥离时间组件在这篇文章中,我们将为您详细介绍来自日期时间的MySQL剥离时间组件的方方面面,并解答来自日期时间的mysql剥离时间组件是什么常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的ISO 8601 MySQL数据库时间戳:MySQL日期时间值不正确、Java 8 日期时间组件、Java日期时间API系列2-----Jdk7及以前的日期时间类在mysql数据库中的应用、mysql 关于日期时间的字段类型。
本文目录一览:- 来自日期时间的MySQL剥离时间组件(来自日期时间的mysql剥离时间组件是什么)
- ISO 8601 MySQL数据库时间戳:MySQL日期时间值不正确
- Java 8 日期时间组件
- Java日期时间API系列2-----Jdk7及以前的日期时间类在mysql数据库中的应用
- mysql 关于日期时间的字段类型
来自日期时间的MySQL剥离时间组件(来自日期时间的mysql剥离时间组件是什么)
我需要在Mysql中进行日期比较而不考虑时间成分,即我需要将“ 2008-11-05 14:30:00”转换为“ 2008-11-05”
目前我正在这样做:
SELECT from_days(to_days(my_date))
有适当的方法吗?
答案1
小编典典是的,使用日期功能:
SELECT date(my_date)
ISO 8601 MySQL数据库时间戳:MySQL日期时间值不正确
错误日志:
{ [Error: Incorrect datetime value: ‘2012-08-24T17:29:11.683Z’ for
column ‘robot _refreshed_at’ at row 1] number: 1292,sqlStateMarker:
‘#’,sqlState: ‘22007’,message: ‘Incorrect datetime value:
\’2012-08-24T17:29:11.683Z\’ for column \’ robot_refreshed_at\’ at row
1′,sql: ‘INSERT INTO users
(id,name,count_moments,count_likes,count_followers,rob
ot_refreshed_at,robot_count_followers) VALUES
(\’1834084\’,\’NNNyingzi\’,\’5\’,\
‘0\’,\’0\’,\’2012-08-24T17:29:11.683Z\’,\’0\’)’,setMaxListeners:
[Function],emit: [Function],addListener: [Function],on: [Function],
once: [Function],removeListener: [Function],removeAllListeners:
[Function],listeners: [Function] }
我在Node.js中使用这段代码
@H_301_25@ if s instanceof Date return s.toISOString()
并在数据库中更新它们.
sql插入表达式如下:
@H_301_25@ INSERT INTO users (id,rob ot_refreshed_at,robot_count_followers) VALUES (\'1834084\',\'NNNyingzi\',\'5\',\ '0\',\'0\',\'2012-08-24T17:29:11.683Z\',\'0\')
我做错了吗?我只是从服务器中的表中使用PHPMyAdmin复制了一个表.
非常感谢.
MysqL recognizes 07001 and 07002 values in these formats:
As a string in either @H_301_25@'YYYY-MM-DD HH:MM:SS' or @H_301_25@'YY-MM-DD HH:MM:SS' format. A “relaxed” Syntax is permitted here,too: Any punctuation character may be used as the delimiter between date parts or time parts. For example,@H_301_25@'2012-12-31 11:30:45',@H_301_25@'2012^12^31 11+30+45',@H_301_25@'2012/12/31 11*30*45',and @H_301_25@'2012@12@31 11^30^45' are equivalent.
As a string with no delimiters in either @H_301_25@'YYYYMMDDHHMMSS' or @H_301_25@'YYMMDDHHMMSS' format,provided that the string makes sense as a date. For example,@H_301_25@'20070523091528' and @H_301_25@'070523091528' are interpreted as @H_301_25@'2007-05-23 09:15:28',but @H_301_25@'071122129015' is illegal (it has a nonsensical minute part) and becomes @H_301_25@'0000-00-00 00:00:00'.
As a number in either @H_301_25@YYYYMMDDHHMMSS or @H_301_25@YYMMDDHHMMSS format,provided that the number makes sense as a date. For example,@H_301_25@19830905132800 and @H_301_25@830905132800 are interpreted as @H_301_25@'1983-09-05 13:28:00'.
A 07001 or 07002 value can include a trailing fractional seconds part in up to microseconds (6 digits) precision. Although this fractional part is recognized,it is discarded from values stored into 07001 or 07002 columns. For information about fractional seconds support in MysqL,see 07007.
您的日期字体’2012-08-24T17:29:11.683Z’不适合任何这些格式;建议你 –
>使用Node.js Date对象的toLocaleFormat()
方法(确保MysqL连接的时区与Node.js的语言环境的时区匹配):
@H_301_25@ if s instanceof Date return s.toLocaleFormat("%Y-%m-%d %H:%M:%s")
>使用Node.js Date对象的valueOf()
方法获取自UNIX纪元以来的时间值(以毫秒为单位),除以1000(从UNIX纪元开始获得秒数)并通过MysqL的FROM_UNIXTIME()
函数.
Java 8 日期时间组件
jdk8 引入了全新的日期和时间组件,并把它们归纳到一系列的包下。核心包 java.time 使用的历法采用 ISO-8601 标准,当然,我们也可以使用 java.time.chrono 包中的一些非标准的历法,比如日本帝国历法(天皇年号)、泰国佛教历法(佛陀诞生)、中华民国历法(辛亥革命)、伊斯兰黑蚩拉历法。java.time.format 提供日期的格式化和转换。注意,新的 API 操作都是线程安全的,因为新的日期 API 类都是 final 修饰而不可变的,如果遇到加减运算及格式化操作,本质上会创建新的实例。
java.time 包内,有几个比较重要的组件:
Instant(时间戳)
LocalDate(日期)
LocalTime(时间)
LocalDateTime(日期时间)
ZonedDateTime(带有区域信息的日期时间,比如中国默认使用的是东八区)
Period(如两个日期之间相差的天数)
Druation(两个日期时间之间间隔的秒和纳秒)
Instant
Instant 本质上是一个数字时间戳,底层实际上是对 System.currentTimeMillis () 进行了包装。
Instant now = Instant.now();
System.out.println(now.toString());
// 毫秒
System.out.println(now.get(ChronoField.MILLI_OF_SECOND));
// 微秒,只是用毫秒数除以1000
System.out.println(now.get(ChronoField.MICRO_OF_SECOND));
// 纳秒,只是用毫秒数除以1000_000
System.out.println(now.get(ChronoField.NANO_OF_SECOND));
// 毫秒转Instant
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
// 2018-06-16T23:12:01
System.out.println(localDateTime);
LocalDate
LocalDate 格式:2017-06-04,类似于 java.sql.Date,不包含时间。1.8 之前的 java.lang.Date 是包含时间的,所以从结构上看,1.8 之前的设计有些糟糕。
// 获得当前日期
LocalDate now = LocalDate.now();
System.out.println(now.toString());
// 日期加上1天
LocalDate localDate2 = now.plusDays(1);
System.out.println(localDate2.toString());
// 日期加上一周
LocalDate localDate3 = now.plusWeeks(1);
System.out.println(localDate3);
// 计算当前年的第52天是几月几号
System.out.println("今年的第52天 = " + now.withDayOfYear(52));
// 字符串转日期
DateTimeFormatter strToDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
TemporalAccessor dateTemporal = strToDateFormatter.parse("2017-01-01");
LocalDate date = LocalDate.from(dateTemporal);
System.out.println(date);
// 格式化日期
DateTimeFormatter dateToStrFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
String dateStr = dateToStrFormatter.format(now);
System.out.println(dateStr);
LocalTime
LocalTime 格式为 13:01:02.221,在只需要处理时间的场景下,它变得非常有用。
LocalTime localTime = LocalTime.now();
System.out.println("local time = " + localTime);
System.out.println("plus 12 hours = " + localTime.plusHours(12));
LocalDateTime
LocalDateTime 本质上有 LocalDate 和 LocalTime 组成。
// 获得当前日期时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
// 字符串转日期时间。
DateTimeFormatter strToDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
TemporalAccessor dateTemporal = strToDateFormatter.parse("2017-01-01 12:12:13");
LocalDate date = LocalDate.from(dateTemporal);
System.out.println(date);
// 格式化日期时间
DateTimeFormatter dateToStrFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String dateStr = dateToStrFormatter.format(now);
System.out.println(dateStr);
Period
Period 代表的是两个日期之间的天、月、年数差值,当然,我们也可以直接使用日期中的 until 方法来完成同样的效果。
LocalDate startDate = LocalDate.now();
LocalDate endDate = startDate.plusDays(1);
Period period = Period.between(startDate, endDate);
System.out.println("间隔的天数" + period.getDays());
System.out.println("间隔的月数:" + period.getMonths());
System.out.println("间隔的年数:" + period.getYears());
// 直接使用日期类中的方法计算日期间隔
long days = startDate.until(endDate, ChronoUnit.DAYS);
System.out.println("间隔的天数:" + days);
long weeks = startDate.until(endDate, ChronoUnit.WEEKS);
System.out.println("间隔的周数:" + weeks);
Duration
Duration 表示的是两个日期时间间隔的秒以及纳秒数。
LocalDateTime start = LocalDateTime.now();
LocalDateTime end = start.plusDays(1);
Duration duration = Duration.between(start, end);
System.out.println("间隔的秒数:" + duration.get(ChronoUnit.SECONDS));
System.out.println("间隔的纳秒数:" + duration.get(ChronoUnit.NANOS));
JDBC
最新 JDBC 映射将把数据库的日期类型和 Java 8 的新类型关联起来:
SQL -> Java
--------------------------
date -> LocalDate
time -> LocalTime
timestamp -> LocalDateTime
再也不会出现映射到 java.util.Date 其中日期或时间某些部分为 0 的情况了。
后续待补充。。。
Java日期时间API系列2-----Jdk7及以前的日期时间类在mysql数据库中的应用
1.java中与数据库相关的时间类
java提供与mysql方便交互的三种数据类型:
java.sql.Date
java.sql.Time
java.sql.Timestamp
它们都是继承java.util.Date,算是对该类的精简,很适合跟数据库交互。
2.MySQL 中的日期和时间类型
日期和时间类型 | 字节 | 最小值 | 最大值 |
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038 年的某个时刻 |
TIME | 3 | -838:59:59 | 838:59:59 |
YEAR | 1 | 1901 | 2155 |
3.java中类与mysql中类型的匹配
java类型 | mysql类型 |
timestamp | datetime |
timestamp | timestamp |
timestamp | date 保留日期部分 |
timestamp | time 保留时间部分 |
date | date |
time | time |
4.mysql中datetime与timestamp的区别
a)DATETIME的默认值为null,5.6版本之后,也能用CURRENT_TIMESTAMP;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。
b)DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
c)两者的存储方式不一样 ,对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。
d)两者所能存储的时间范围不一样:
timestamp所能存储的时间范围为:’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’;
datetime所能存储的时间范围为:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。
所以,如果要适用广泛的,建议适用DATETIME。
参考:https://www.jianshu.com/p/937656cb269b
https://blog.csdn.net/z3278221/article/details/81000876
mysql 关于日期时间的字段类型
mysql日期和时间类型
mysql有5种表示时间值的日期和时间类型,分别为、DATE,TIME,YEAR,DATETIME,TIMESTAMP。
TIMESTAMP类型有专有的自动更新特性,
TIMESTAMP类型有专有的自动更新特性,
TIMESTAMP类型有专有的自动更新特性,
类型 | 大小 (字节) |
范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ''-838:59:59''/''838:59:59'' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
转自:https://www.cnblogs.com/panxuejun/p/6222138.html
关于来自日期时间的MySQL剥离时间组件和来自日期时间的mysql剥离时间组件是什么的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ISO 8601 MySQL数据库时间戳:MySQL日期时间值不正确、Java 8 日期时间组件、Java日期时间API系列2-----Jdk7及以前的日期时间类在mysql数据库中的应用、mysql 关于日期时间的字段类型等相关内容,可以在本站寻找。
本文标签: