java、postgresql时间相关转换

java

关于java中六个时间类的使用和区别
java.util.Date
java.sql.Date
java.sql.Time
java.sql.Timestamp
java.text.SimpleDateFormat

java.util.Date日期格式为:年月日时分秒
java.sql.Date日期格式为:年月日
java.sql.Time日期格式为:时分秒
java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)
java.text.SimpleDateFormat:其他四种均可以被格式化同种样式的时间

	public static void main(String[] args) {
		try {
			//获取系统时间戳
			long nowTime=System.currentTimeMillis();
			System.out.println(nowTime); // 1583591680243
			
			java.util.Date d1 = new java.util.Date();
			System.out.println(d1); // Thu Mar 05 23:30:49 CST 2020
			System.out.println(d1.getTime()); // 1583422323273
			
			java.util.Date d2 = new java.util.Date(0);
			System.out.println(d2); // Thu Jan 01 08:00:00 CST 1970
			System.out.println(d2.getTime()); // 0
			
			// Date转换成String
			SimpleDateFormat format1 = new SimpleDateFormat();
			System.out.println(format1.format(d1)); // 20-3-5 下午11:41
			
			SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			System.out.println(format2.format(d1)); // 2020-03-05 23:44:08
			
			// String转换成Date
			String timeStr1 = "2020-03-05 08:25:42";
			java.util.Date d3 = format2.parse(timeStr1);
			System.out.println(d3); // Thu Mar 05 08:25:42 CST 2020
			
			// String转换成Timestamp
		    System.out.println(java.sql.Timestamp.valueOf(timeStr1)); // 2020-03-05 08:25:42.0
			
			java.sql.Date sDate = new java.sql.Date(1583422323273L);
			System.out.println(sDate); // 1970-01-19
			java.sql.Timestamp sTimestamp = new java.sql.Timestamp(1583422323273L);
			System.out.println(sTimestamp); // 2020-03-05 23:32:03.273
			java.sql.Time sTime = new java.sql.Time(1583422323273L);
			System.out.println(sTime); // 23:32:03
			
			// 格式化
			System.out.println(format2.format(sDate)); // 2020-03-05 23:32:03
			System.out.println(format2.format(sTime)); // 2020-03-05 23:32:03
			System.out.println(format2.format(sTimestamp)); // 2020-03-05 23:32:03
			System.out.println(format2.format(d1)); // 2020-03-05 23:32:03
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

postgresql

extract函数用于从一个日期中获取某个子集,比如获取年,月,日,时,分,秒等。因此,它支持其关健字 YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、WEEKDAY、YEARDAY。例如:

select extract('hour' FROM '2020-03-04 10:52:32'::TIMESTAMP) as time from test limit 1; -- 10
select extract('year' FROM '2020-03-04 10:52:32'::TIMESTAMP) as time from test limit 1; -- 2020

epoch的含义官网上的原本解释如下:

For date and timestamp values, the number of seconds since 1970-01-01 00:00:00 UTC (can be negative);
for interval values, the total number of seconds in the interval.

翻译过来就是说,对于日期和时间戳类型的值,会获取到从1970-01-01 00:00:00 UTC这个Linux纪元年的开始时间到给定的日期或者时间戳参数的时间之间相隔的秒数。

而对于interval这种时间间隔类型,这会获取到这个时间间隔对应的秒数目。

字符日期格式转化为UNIX时间戳格式

select extract(epoch FROM '2020-03-04 10:52:32'::TIMESTAMP) as time from test limit 1; -- 1583319152

“1583319152”对应的时间其实是“2020/3/4 18:52:32”,相差8个小时,肯定是时区的问题。
故我们应该如下操作

select extract(epoch FROM '2020-03-04 10:52:32'::TIMESTAMP WITH TIME ZONE) as time from test limit 1;  -- 1583290352

UNIX时间戳转化为字符日期格式

select date(to_timestamp(1583319152)) from test limit 1; -- 2020-03-04
select to_timestamp(1583319152) as time from test limit 1; -- 2020-03-04 18:52:32+08
select to_timestamp(1583290352) as time from test limit 1; -- 2020-03-04 10:52:32+08
select to_char(to_timestamp(1583290352),'yyyy-MM-dd HH24:MI:SS') as time  from test limit 1; -- 2020-03-04 10:52:32

参考:postgresql时间函数详解

你可能感兴趣的:(java,postgresql,timestamp)