文档章节

Java中的时间和时区

secondriver
 secondriver
发布于 2015/09/17 09:09
字数 716
阅读 18
收藏 0

关于时区的划分参见维基百科:http://zh.wikipedia.org/wiki/%E6%99%82%E5%8D%80


Java中关于时间的类有两个关键的类:

java.util.Calendar;

java.util.Date;

今天在使用PostgreSQL数据库的时候,关于时间类型提供了一个timestamp with time zone,结果没注意,写入数据库的时间在页面上显示没能达到希望,问题出在该类型下的时间格式使用UTC来描述,这样要正确显示本地特征的日期就要做额外的处理。


写了几个测试,附带说明一下Java中的时间和时区

1.获取本地默认时区

@Test
    public void test1() {
        System.out.println("TimeZone.getDefault():" + TimeZone.getDefault());
    }

默认时区内容:


TimeZone.getDefault():sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]

2.支持的时区信息


@Test
    public void test3() {
        String[] ids = TimeZone.getAvailableIDs();
        System.out.println("TimeZone AvailableIDs Numbers :" + ids.length);
        for (String id : ids) {
            System.out.println("TimeZone:Id-" + id);
        }
    }

部分结果:

TimeZone AvailableIDs Numbers :619
TimeZone:Id-Etc/GMT+12
TimeZone:Id-Etc/GMT+11
TimeZone:Id-Pacific/Midway
TimeZone:Id-Pacific/Niue
TimeZone:Id-Pacific/Pago_Pago
TimeZone:Id-Pacific/Samoa
TimeZone:Id-US/Samoa
TimeZone:Id-America/Adak
TimeZone:Id-America/Atka
TimeZone:Id-Etc/GMT+10
TimeZone:Id-HST
TimeZone:Id-Pacific/Honolulu
TimeZone:Id-Pacific/Johnston
TimeZone:Id-Pacific/Rarotonga
TimeZone:Id-Pacific/Tahiti
TimeZone:Id-SystemV/HST10
TimeZone:Id-US/Aleutian
TimeZone:Id-US/Hawaii

3.GMT时间和本地时间显示


@Test
    public void test2() {
        Date d = new Date();
        System.out.println("Date.toGMTString():" + d.toGMTString());
        System.out.println("Date.toLocaleString():" + d.toLocaleString());
    }

结果:



Date.toGMTString():29 Sep 2013 10:25:37 GMT
Date.toLocaleString():2013-9-29 18:25:37

4. 下面是Date对象的时间方法和Calendar对象方法对比

public void test4() {
        Date d = new Date();
        System.out.println("java.util.Date:");
        System.out.println("Date.getYear():" + d.getYear());
        System.out.println("Date.getMonth():" + d.getMonth());
        System.out.println("Date.getDay():" + d.getDay());
        System.out.println("Date.getHours():" + d.getHours());
        System.out.println("Date.getMinutes():" + d.getMinutes());
        System.out.println("Date.getSeconds():" + d.getSeconds());
    }
public void test10() {
        /**
         * JDK1.1后:抛弃Date类,使用Calendar类
         */
        Calendar c = Calendar.getInstance();
        System.out.println("YEAR:" + (c.get(Calendar.YEAR)));
        System.out.println("MONTH:" + ((c.get(Calendar.MONTH)) + 1));
        System.out.println("DAY_OF_MONTH:" + (c.get(Calendar.DAY_OF_MONTH)));
        System.out.println("HOUR_OF_DAY:" + (c.get(Calendar.HOUR_OF_DAY)));
        System.out.println("MINUTE:" + (c.get(Calendar.MINUTE)));
        System.out.println("SECOND:" + (c.get(Calendar.SECOND)));
        System.out.println("DAY_OF_WEEK:" + (c.get(Calendar.DAY_OF_WEEK)));
        System.out.println("DAY_OF_WEEK_IN_MONTH:"
                + (c.get(Calendar.DAY_OF_WEEK_IN_MONTH)));
        System.out.println("DAY_OF_YEAR:" + (c.get(Calendar.DAY_OF_YEAR)));
    }

结果:

Date类:
结果
java.util.Date:
Date.getYear():113
Date.getMonth():8
Date.getDay():0
Date.getHours():18
Date.getMinutes():25
Date.getSeconds():37
Calendar类:
结果
YEAR:2013
MONTH:9
DAY_OF_MONTH:29
HOUR_OF_DAY:18
MINUTE:25
SECOND:37
DAY_OF_WEEK:1
DAY_OF_WEEK_IN_MONTH:5
DAY_OF_YEAR:272

Date类的大多数方法已经弃用,建议使用Calendar类,Calendar提供了功能更加完整,强大的时间处理方法和属性。


4.关于年和毫秒数


Date实例获取的year是当前年份与1900之差。

Date实例的getTime()返回当前时间距离:1970-01-01 00:00:00毫秒数。

历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)和1900年1月1日的00:00:00.000两个时间点是Java开发中时间日期的重要参考量。


5.UTC时间

@Test
    public void test5() {
        long times = Date.UTC(2, 2, 1, 1, 1, 59);
        System.out.println("Date.UTC(2, 2, 1, 1, 1, 59):" + times);
        times = Date.UTC(113, 2, 1, 1, 1, 59);
        System.out.println("Date.UTC(113, 2, 1, 1, 1, 59):" + times);
    }

结果:


Date.UTC(2, 2, 1, 1, 1, 59):-2140815481000
Date.UTC(113, 2, 1, 1, 1, 59):1362099719000

这里的时间参考点就是:1970 年 1 月 1 日的 00:00:00.000


附一张时区图:

191120811.jpg


本文出自 “野马红尘” 博客,谢绝转载!

© 著作权归作者所有

secondriver
粉丝 10
博文 229
码字总数 233821
作品 0
广州
程序员
私信 提问
部署在Tomcat 服务器中的web应用读取时间与系统时间不一致问题 【靠谱】

我在部署应用到Ubantu系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的应用程序获取的时间不一致,总是相差8个小时,但是查看当前操作系统的时区也是CST时区(中国标准时区)。 ...

Airship
04/22
28
0
mysql中时间数据差14小时

问题 调试代码中,确定了出来的时间数据是准确了,没有出现差14小时情况,通过Spring hibernate jdbc这一路保存到mysql数据库中,就出现了14小时问题。 排查 mysql排查 到这里,基本上排除了...

亚林瓜子
2018/12/18
354
0
JavaWeb 项目与系统时间相差 8 个小时的问题

写在前面 今天记录分享一个排查部署到 Linux 上的 web 项目执行的时间和本地系统时间相差 8 小时的问题 环境:redhat 6.5 考虑有规律的时间差可能和时区不同有关 1 查看 Linux 系统时间和时区...

charmsongo
03/31
33
0
Java 8新的时间日期库的20个使用示例

除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API。Java对日期,日历及时间的...

清尘V
2015/03/17
204
0
开源BI工具Metabase安装

安装Metabase: Metabase是作为Java jar文件构建和打包的,可以在有Java环境的任何地方运行。下面我们提供有关如何在各种常见配置中安装和运行Metabase的详细说明。 本篇只介绍jar安装方式,...

全科
2018/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
43
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部