java时间戳 时间格式转换与时差
时间戳代码
protected static Format format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static void printSysProperties(){Properties props=System.getProperties(); Iterator iter=props.keySet().iterator(); while(iter.hasNext()){ String key=(String)iter.next(); System.out.println(key+" = "+ props.get(key)); } }/*** timeZoneOffset表示时区,如中国一般使用东八区,因此timeZoneOffset就是8* @param timeZoneOffset* @return*/public String getFormatedDateString(int timeZoneOffset){if (timeZoneOffset > 13 || timeZoneOffset < -12) {timeZoneOffset = 0;}TimeZone timeZone;String[] ids = TimeZone.getAvailableIDs(timeZoneOffset * 60 * 60 * 1000);if (ids.length == 0) {// if no ids were returned, something is wrong. use default TimeZonetimeZone = TimeZone.getDefault();} else {timeZone = new SimpleTimeZone(timeZoneOffset * 60 * 60 * 1000, ids[0]);}SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");sdf.setTimeZone(timeZone);return sdf.format(new Date());}public static String getFormatedDateString(String _timeZone){TimeZone timeZone = null;if(StringUtils.isEmpty(_timeZone)){timeZone = TimeZone.getDefault();}else{timeZone = TimeZone.getTimeZone(_timeZone);}SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");sdf.setTimeZone(timeZone);//TimeZone.setDefault(timeZone);return sdf.format(new Date());
}public static void main(String args[]){System.out.println(getFormatedDateString(""));System.out.println(getFormatedDateString("Asia/Shanghai"));System.out.println(getFormatedDateString("Japan"));System.out.println(getFormatedDateString("Europe/Madrid"));System.out.println(getFormatedDateString("GMT+8:00"));printSysProperties();}
时间区域和JAVA
涉及有关时间区域信息时Java和Solaris很相似。每个时间区域都有一个时间区域ID标识符。在J2SE 1.3 and 1.4中,这个ID是个字符串,是由位于J2SE 安装程序的jre/lib子目录中的tzmappings文件这些ID列表。 J2SE 1.3 仅仅只包含tzmappings文件,但是 J2SE 1.4包含世界不同地区的时间区域数据文件。jre/lib/zi存放着这些文件。在J2SE 1.4里,sun.util.calendar.ZoneInfo从这些文件获取DST规则。在Solaris中, 这些时间区域数据文件是以二进制形式存放的,不是文本文件,因此你不能看它们。 在J2SE 1.4中的时间区域数据文件和在Solaris中是不同的。
java.util.TimeZone类中getDefault方法的源代码显示,它最终是会调用sun.util.calendar.ZoneInfo类的getTimeZone 方法。这个方法为需要的时间区域返回一个作为ID的String参数。这个默认的时间区域ID是从 user.timezone (system)属性那里得到。如果user.timezone没有定义,它就会尝试从user.country和java.home (System)属性来得到ID。 如果它没有成功找到一个时间区域ID,它就会使用一个"fallback" 的GMT值。换句话说, 如果它没有计算出你的时间区域ID,它将使用GMT作为你默认的时间区域。
注意,System属性是在java.lang.System类的initProperties方法中被初始化的。这是一个本地方法。因此源代码是不可用的----除非你深入到J2SE分发包中的本地代码库中去研究。然而,在Windows系统中,System 属性是从Windows注册表中被初始化的,而在Linux/Unix中是由环境变量来进行初始化。initProperties方法的Javadoc声明,某些属性"必须保证被定义" 且列出它们。被java.util.TimeZone类的getDefault方法使用的三个System属性中,只有java.home作为一种“保证的”属性在Javadoc中被列出。
推荐的解决方案
因此,你如何确保JAVA能给你正确的时间和日期呢?最好的办法是确认JAVA虚拟机(JVM)的默认TimeZone类是正确的,且是适合你的地理范围(Locale)的。你如何来确保默认TimeZone是正确的且适合的呢?这又是一个新问题了。象大多数处理的问题一样,这个也有许多解决方案。根据java.util.TimeZone.getDefault方法的源代码来看,最好的办法是正确地设置user.timezone属性。在启动JAVA虚拟机时,你能很容易的通过使用 -D 命令 -line 参数的办法来覆盖(override)在java.lang.System.initProperties方法中所设置的值。例如:
- java -Duser.timezone=Asia/Shanghai DateTest
java -Duser.timezone=Asia/Shanghai DateTest
这个命令启动DateTest类,并设置 user.timezone属性到Asia/Shanghai。你也能够通过使用java.lang.System 类的setProperty方法来设置user.timezone 属性:
- System.setProperty("user.timezone","Asia/Shanghai");
System.setProperty("user.timezone","Asia/Shanghai");
如果没有一个可用的时间区域ID适合你,那么就你可以创建一个自定义TimeZone 使用java.util.TimeZone 类的 setDefault 方法将它设置为默认的时间区域----就象我先前在ItsInitializer 类中所做的操作一样。
记住,在J2SE中,大多数日期和时间相关的类都包含时间区域信息,包括那些格式类,如java.text.DateFormat, 因此它们都会被JVM的默认时间区域所影响。然而,在你创建这些类的实例时,你能为它们确保正确的时间区域信息,使得你可以更容易来设置整个JVM的默认时间区域。并且一旦设置好,就可以确保所有的这些类都将使用同一个默认的时间区域。
转载至:http://my.oschina.net/hulubo/blog/40888
java时间戳 时间格式转换与时差相关推荐
- java UTC时间格式转换
UTC时间格式样例:2018-09-28T16:00:00.000Z 本地时间格式样式:2018-09-28 24:00:00 将本地时间格式转换成UTC格式 public static String ...
- java datetime 转换_如何实现Java日期时间格式转换
Java日期时间以及日期相互转换 Java日期时间,以及相互转化,供大家参考,具体内容如下 package com.study.string; import java.text.ParseExcept ...
- Java——时间戳和时间格式转换
时间戳(TimeStamp):通常是一个字符序列,唯一地标志某一刻的时间.Java 中时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数. 一.获取时间戳的方式 1.Sy ...
- java定义时间格式大全_Java时间格式转换大全
package com.date; import java.text.DateFormat; import java.text.ParseException; import java.text.Par ...
- java格式_java时间格式转换大全
Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @ ...
- php把时间格式转换为时间戳,php如何将时间格式转换成时间戳?
php时间格式转换为时间戳的方法:1.使用mktime()将时间转换为时间戳,语法为"mktime(小时.分钟.秒.月.日.年)":2.使用strtime()将字符串表示的日期转换 ...
- java时间格式转换_Java时间日期格式转换
突然忘记了时间格式怎么转换,特此做个记录 Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate ...
- java输出格林威治时间_Java之格林威治时间格式转换成北京时间格式
Java之格林威治时间格式转换成北京时间格式 /** * Copyright 2020. yaodouwang.com Studio All Right Reserved * * Create on ...
- Java ISO 8601时间格式转换
String pattern = "YYYY-MM-dd'T'HH:mm:ss.SSSZZ"; String timeStr=DateFormatUtils.format(new ...
最新文章
- dfs递归实现组合型枚举
- python文件分块读取_Python多进程分块读取超大文件的方法
- 用命令行连接mysql文件时出现错误_MySQL使用cmd命令窗口安装错误信息提示的解决方法...
- c语言寻找公共字符串,C语言查找两个字符串中的最大公共子串
- GitHub停用俄罗斯公司开发者账号
- 4个macOS上隐藏的小技巧
- Ubuntu14.10安装Eclipse
- 多图赏析联想Windows 8平板ThinkPad Tablet 2
- APS计划排程和生产排产系统,包含哪些排程算法?
- 双击 计算机 打不开,电脑双击桌面图标打不开的解决方法
- 用Windows电脑看epub小说,哪些阅读器软件更好用?
- Unity3D Shader 入门
- PostgreSQL安装详细步骤(linux)
- 5年多工作经验,工资给15k,要是你,你会接受吗?
- 软考云题库Web版题库V1.1更新功能
- opencv识别图像红色区域,并输出红色区域中心点坐标
- Ubuntu 20.04 美化终端
- css gray rgb数值,CSS3 调色板 颜色值对照表
- (转)SCJP 认证考试指南
- 'BMap' is not defined 解决方案