时间戳

一、基本概念

  定义:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

  时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。

二、Java中的时间戳

  Java中的java.util.Date为我们提供了操作时间的一系列操作,当然也提供了获取时间戳的方法,我们可以调用Date对象的getTime() 方法来返回当前对象的时间戳。需要注意的是时间戳是以毫秒为单位的,也就是说Java的时间戳的精确度在毫秒级别。而unix中时间戳是精确到秒级别,所以我们参考一些资料的时候会出现/1000(除以1000)的情况,将Java的时间戳的级别精确到秒所有要去除后三位即可,也就是除以1000了。

示例一:获取当前时间的时间戳

@Test
public void test() {
	SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
	Date timeOfNow = new Date();// 获取当前系统时间
	String strTime = dateFormate.format(timeOfNow);// 格式化时间
	System.out.println("当前时间为:" + strTime);// 输出当前时间
	Long strTimeStamp = timeOfNow.getTime();// 获取时间的时间戳
	System.out.println("当前时间的时间戳为:" + strTimeStamp);// 输出当前时间的时间戳
}

运行结果为:

当前时间为:2017-05-10 23:52:19
当前时间的时间戳为:1494431539619

示例二:将时间戳转换为Date对象

@Test
public void test() {
	SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
	Long timeStamp = new Long("1494431539619");// 定义时间戳
	String formateStampToString = dateFormate.format(timeStamp);// 将时间戳转换为字符串类型的Date
	System.out.println("Format To String(Date):" + formateStampToString);
	try {
		Date formateStampToDate = dateFormate.parse(formateStampToString);// 将字符串转换为Date类型
		System.out.println("Format To Date:" + formateStampToDate); // 输出Date
	} catch (ParseException e) {
		e.printStackTrace();
	}
}

运行结果为:

Format To String(Date):2017-05-10 23:52:19
Format To Date:Wed May 10 23:52:19 CST 2017

示例三:Date(or String)转化为时间戳

@Test
public void test() {
	SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
	String time = "1970-01-06 11:45:55";
	try {
		Date date = dateFormate.parse(time);
		System.out.print("Format To times:" + date.getTime());
	} catch (ParseException e) {
		e.printStackTrace();
	}
}

运行结果为:Format To times:445555000

注意事项:定义SimpleDateFormat时newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");里面字符串头尾不能有空格,如果有空格那么用做转换时对应的时间字符串也要有空格(两者是对应的),否则会报错,报错信息如下:

java.text.ParseException: Unparseable date: "1970-01-06 11:45:55"
	at java.text.DateFormat.parse(DateFormat.java:366)
...

三、数据库中的时间戳

3.1 MySQL获得当前时间戳函数

函数为:current_timestamp, current_timestamp()

示例:

select current_timestamp, current_timestamp();

注意:此时输出的时间戳不是总秒数,而是当前的时间。

3.2 MySQL (Unix 时间戳、日期)转换函数

获取Unix时间戳函数:

  • unix_timestamp();//获取当前时间的时间戳
  • unix_timestamp(date);//获取指定时间所对应的时间戳

将时间戳转换为时间:

  • from_unixtime(unix_timestamp);
  • from_unixtime(unix_timestamp,format);//指定转换时间的格式

示例:

select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800

select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'

  其它详细的函数就不在此赘述了,详见MySQL的API。

3.3 timestamp数据类型

  timestamp 这种数据类型表现为自动生成,Mysql中其默认值为CURRENT_TIMESTAMP,也就是上面所提及的获取当前时间戳的函数,每当更新数据时其会自动进行更新。

  timestamp 一般用作给表中行加版本戳。存储大小为 8 字节。 虽然timestamp 显示格式与datetime的显示格式完全一样,换句话说,显示宽度固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS。其差异可参考:MySQL中的datetime与timestamp比较

  看到这里,您是否对给表加版本戳感到疑惑,其实我也想更加细化的弄明白它,所以写下了下面这篇博客可供参考:Hibernate事务中的加锁机制

参考资料:

赞赏

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值