Java编程:获取当前时间的时间戳及时间戳转换问题

一、时间戳定义(摘自百度百科)

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。 在实际应用上, 它可以使用在包括电子商务、 金融活动的各个方面, 尤其可以用来支撑公开密钥基础设施的 “不可否认” 服务。

二、获取当前时间戳的几种方法

方法一:通过System的currentTimeMillis()方法

System.out.println(System.currentTimeMillis());

方法二:通过Date实例对象的getTime()方法

System.out.println(new Date().getTime());

方法三:使用Calendar.getInstance().getTimeInMillis()方法

System.out.println(Calendar.getInstance().getTimeInMillis());

使用Java的方法获取的时间戳均是13位数,原因在于获取的是时间戳是毫秒级的。

将该时间戳除以1000,即可获得秒级的时间戳。

import java.util.Calendar;
import java.util.Date;

import org.junit.Test;

public class TimeStampTest {

	@Test
	public void testGetTimeStamp() {
		
		//方法一:使用System.currentTimeMillis()获取当前时间戳
		//精确到毫秒
		System.out.println(System.currentTimeMillis());
		//精确到秒
		System.out.println(System.currentTimeMillis()/1000);
		
		//方法二:使用new Date().getTime()获取当前时间戳
		//精确到毫秒
		long timeStamp = new Date().getTime();
		System.out.println(timeStamp);
		//精确到秒
		System.out.println(timeStamp/1000);
		
		//方法三:使用Calendar.getInstance().getTimeInMillis()获取当前时间戳
		//精确到毫秒
		System.out.println(Calendar.getInstance().getTimeInMillis());
		//精确到秒
		System.out.println(Calendar.getInstance().getTimeInMillis()/1000);
		
	}

}

 以上代码运行结果为:

1582182467461
1582182467
1582182467461
1582182467
1582182468631
1582182468

三、指定时间String 如何转换为 时间戳(默认13位)

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.junit.Test;

public class TimeStampTest {
	
	@Test
	public void testToTimeStamp() {
		
		//已知String日期字符串
		String dateString = "2020-02-20 15-07-47";
		//自定义日期格式
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
		
		try {
			
			//先将String字符串按指定格式解析为日期对象
			Date date = simpleDateFormat.parse(dateString);
			//再使用Date对象的getTime()方法获得时间戳
			System.out.println(date.getTime());
			
		} catch (ParseException e) {
			e.printStackTrace();
		}	
	}
}

以上代码运行结果为:

1582182467000

这里需要注意一点:

String与SimpleDateFormat格式指定的数据形式都是只精确到秒的,也就是说最后输出的时间戳只能精确到秒级(10位),而Date对象默认的getTime()方法输出的是13位的毫秒级时间戳。在这里它直接默认补全到13位,后面加了000。

四、指定时间戳如何转换为Date/String

1、指定时间戳 转换为 String字符串输出时间(格式化时间):

import java.text.SimpleDateFormat;

import org.junit.Test;

public class TimeStampTest {
	
	@Test
	public void testToString() {
		
		//已知毫秒级时间戳
		long timeStamp1 = 1582182467461L;
		//已知秒级时间戳
		long timeStamp2 = 1582182468L;
		
		//确定指定的字符串格式以输出时间
		final String DATE_PATTERN = "yyyy-MM-dd HH-mm-ss";
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_PATTERN);
		//用format方法将 时间戳 转化为 指定格式的字符串
		//默认是转换13位的时间戳
		String date1 = simpleDateFormat.format(timeStamp1);
		System.out.println(date1);
		
		//10位的时间戳可以乘以1000
		String date2 = simpleDateFormat.format(timeStamp2*1000);
		System.out.println(date2);
		
	}

}

 以上代码运行结果为:

2020-02-20 15-07-47
2020-02-20 15-07-48

2、指定时间戳 转换为 Date对象输出时间:

import java.util.Date;

import org.junit.Test;

public class TimeStampTest {
	
	
	@Test
	public void testToDate() {
		
		//已知13位的毫秒级时间戳
		long timeStamp1 = 1582182467461L;
		//以Date对象的方式输出时间
		Date date1 = new Date(timeStamp1);
		System.out.println(date1);
		
		//已知10位的秒级时间戳
		long timeStamp2 = 1582182468L;
		//在转换时需要变成13位的时间戳
		Date date2 = new Date(timeStamp2*1000);
		System.out.println(date2);
		
	}

}

以上代码运行结果为:

Thu Feb 20 15:07:47 CST 2020
Thu Feb 20 15:07:48 CST 2020

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值