java&postgresql时区总结

1、首先什么是时区?

时区(Time Zone)是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。

2、Date

TimeZone对象给我们的是原始的偏移量,也就是与GMT相差的微秒数,Java的Date对象里面存储着当前时刻到1970年1月1日0:00所经过的毫秒数,它与时区和地域没有关系(其实可以认为是GMT时间)

计算机内部记录的时间(Date date = new Date()), 为格林威治标准时(GMT). 即java.util.Date代表一个时间点,其值为距公元1970年1月1日 00:00:00的毫秒数,所以它可以认为是没有时区和Locale概念的。

3、DateFormat

日期格式化类DateFormat, 对于不同地区的配置一般有两个点, 一个是Locale , 一个是TimeZone

前者(Locale)使DateFormat按所配置的地区特性来输出文字(例如中国,美国,法国不同地区对日期的表示格式不一样,中国可能是2001年10月5日)

后者(TimeZone)让DateFormat知道怎么去转换,去调整时间偏移度,从而得到符合配置的时区的时间.

假设当前时区为GMT+0,取得当前时间为2:00, 那么如果你配置DateFormat.setTimeZome("GMT+8"), 即北京时间的时区, 那么这时候格式化输出的就是10:00了, 因为系统对原始毫秒数进行了时间偏移调整(调到你设置的时区),即加多8小时,之后再格式化输出日期的字符串形式

4、代码事例

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.Date;

public class Test {

    public static void main(String[] args) {

        //TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
        //TimeZone.setDefault(TimeZone.getTimeZone("Europe/Paris")); //注意这行下面的代码要取消注释
        TimeZone time = TimeZone.getDefault();// 这个是国际化所用的
        System.out.println(time);
        Calendar calendar = Calendar.getInstance();// 获取实例
        DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 构造格式化模板
        Date date = calendar.getTime(); // 获取Date对象
        String str = new String();
        str = format1.format(date);// 对象进行格式化,获取字符串格式的输出
        System.out.println(str);
    }

}

输出的结果是:

sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
2015-07-03 22:27:14

如果将注释Europe/Paris这行打开,那么运行的结果是:

sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
2015-07-03 16:30:49

说明使用TimeZone.setDefault方法可以调整显示的时区

时间: 2024-08-25 20:20:06

java&postgresql时区总结的相关文章

java改时区

code: package com.soofound.framework.util; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.TimeZone; /** * 设置时区 * * @author zxf * @date 2015-11-4 */ // java -class

PostgreSQL时区调整

查看数据库的时区与时间: postgres=# select now(); now ------------------------------ 2017-09-29 12:54:04.04916+08 (1 行记录) 查看时区: postgres=# show time zone; TimeZone --------------- Asia/Shanghai (1 行记录) 查看数据库可供选择的时区: postgres=# select * from pg_timezone_names; na

eclipse中使用maven调用postgreSQL

需求: 使用Maven插件调用PostgreSQL数据库 环境: eclipse_4.5.0+JDK_1.7+Tomcat_7.0+Maven+postgresql-9.1-901.jdbc4.jar 问题: 将maven工程在tomcat启动之后,出现错误字符串,主要错误信息如下:Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load J

Docker openjdk-8-jdk-alpine 容器时间与jdk时区不同修改方法

测试时发现以 openjdk-8-jdk-alpine 为基础镜像制作的镜像有时区问题.查资料知道 alpine 本身不带时区信息.按以下方法修改后正常获取时间. 一.挂载宿主机的时区到容器 启动命令增加参数 -v /etc/localtime:/etc/localtime 启动容器,进入查看时间正常,时区也已同步.但java应用获取的时间还是差8小时. 继续查找资料 java 获取时区与 linux 系统时区的不同 参考博客 二.设置容器内时区 通过后来不断尝试,修改 localtime 确定

python socket和HTTP入门

python迭代器: iterator=iter(obj) iterator.next() python函数: def function(*args): 传元组列表参数. def function(**args): 传字典列表参数. Django时区设置:setting.py里面的time_zone=Asian/Shanghai PostgreSQL时区设置:postgres.conf配置文件修改time_zone=Asian/Shanghai python socket模块: 服务器端: im

Java连接postgresql数据库

1.下载驱动jar下载地址:https://jdbc.postgresql.org/download.html 2.导入jar包新建lib文件夹,将下载的jar驱动包拖到文件夹中.将jar驱动包添加到Libraries 3.程序代码如下:HelloWorld.java package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql

java对世界各个时区(TimeZone)的通用转换处理方法

在进行国际性软件项目开发的过程中,有时候会碰到一些比较特殊的要求.比如:比如说,你做的是个购物网站(假设服务器放在中国上海),当全世界客户在你的网站上下订单买东西后,往往希望看到客户所在地下单时间,比如说我是个美国纽约人,我在你的网站上下单后,你给我看到一个上海的下单时间,会觉得非常的奇怪.众所周知,纽约时间相对上海时间大约要晚13小时,如果让客户看到本地时区的时间,将变得更加符合客户的时间观念,使得客户理解比较方便. 其实,java中早已考虑过世界时区(TimeZone)这个问题,并给出了比较

面试题1 -- Java 中,怎么在格式化的日期中显示时区?

使用SimpleDateFormat来实现格式化日期 import java.text.SimpleDateFormat; import java.util.Date; public class DateFormatExample { public static void main(String args[]) { Date today = new Date(); System.out.println("今天 is : " + today); SimpleDateFormat DATE

Java,PostgreSQL时间范围查询

遇到一坑:对于如下代码 select * from order_mileagefuel where date > '2015-11-1' and date< '2015-11-5' 在PostgreSQL的客户端中执行时能得到结果,但在Java中执行时(此时时间范围是参数,类型为String),如date >=#{startDay} and date <=#{endDay} 执行时报如下错误:(而对于MySQL,在代码中却是能够正确执行的.) ERROR: operator doe