java时区转化相关工具方法
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
public class Test
{
public static void main(String[] args)
{
System.out.println("默认时区:" + getLocalTimeId());
System.out.println("时区列表:" + getZoneList());
//原时区的时间
String sourceTime = "2013-08-06 15:30:00";
//原时区东八区Asia/Shanghai,GMT+8:00
String sourceId = "Asia/Shanghai";
//目标时区Asia/Dili,GMT+09:00
String targetId = "Asia/Dili";
//转换后的时间
String targetTime = timeConvert(sourceTime, sourceId, targetId);
System.out.println("原来为:" + sourceTime);
System.out.println("转换为:" + targetTime);
}
/**
* 获取本地默认时区id
* @return string 本地时区id
*/
public static String getLocalTimeId()
{
TimeZone defaultTimeZone = TimeZone.getDefault();
String sourceId = defaultTimeZone.getID();
return sourceId;
}
/**
* 获取受支持的所有可用 ID
* 用来作为页面显示的时区下拉列表
* 以绝对时区显示(不考虑夏令时)
* @return map 存储时区列表+偏移量的map(可用来显示如Hongkong,GMT+08:00)
* 实际使用时,传给服务器是零时区,值传递时区id就可以了,不传递偏移量
*/
public static Map<String, String> getZoneList()
{
String[] zoneIds = TimeZone.getAvailableIDs();
int length = zoneIds.length;
TimeZone timeZone = null;
//存储时区列表+偏移量到map中
Map<String, String> map = new HashMap<String, String>(650);
long offset = 0L;
String diplayOffset = "";
for (int i = 0; i < length; i++)
{
//获取给定 ID 的 TimeZone
timeZone = TimeZone.getTimeZone(zoneIds[i]);
//返回添加到 UTC 以获取此时区中的标准时间的时间偏移量(以毫秒为单位)。
offset = timeZone.getRawOffset();
//对偏移量做显示,如GMT-09:30、GMT+09:30
diplayOffset = appendZoneSuffix(offset);
//存储到map中,形式为Hongkong---GMT+08:00
map.put(zoneIds[i], diplayOffset);
}
return map;
}
/**
* 添加时区偏移量
* @param offset 偏移量(以毫秒为单位)
* @return 日期
*/
public static String appendZoneSuffix(long offset)
{
//将偏移量转化为小时(小数去除不要)
long hour = Long.valueOf((offset / 3600000));
//偏移量对小时取余数,得到小数(以毫秒为单位)
double decimals = offset % 3600000;
//显示为09:30分钟形式
double decimalsZone = (decimals / 3600000) * 60 / 100;
String sAdd = "";
if (hour >= 0)
{
sAdd = "+";
}
else
{
sAdd = "-";
}
hour = hour > 0 ? hour : -hour;
String sHour = hour + "";
if (sHour.length() == 1)
{
sHour = '0' + sHour;
}
decimalsZone = decimalsZone < 0 ? -decimalsZone : decimalsZone;
String sDecimalsZone = decimalsZone + "";
sDecimalsZone = sDecimalsZone.substring(2);
if (sDecimalsZone.length() == 1)
{
sDecimalsZone = sDecimalsZone + '0';
}
else if (sDecimalsZone.length() >= 3)
{
sDecimalsZone = sDecimalsZone.substring(0, 2);
}
return "GMT" + sAdd + sHour + ':' + sDecimalsZone;
}
/**
* 时区 时间转换方法:将当前时间(可能为其他时区)转化成目标时区对应的时间
* @param sourceTime 时间格式必须为:yyyy-MM-dd HH:mm:ss
* @param sourceId 入参的时间的时区id
* @param targetId 要转换成目标时区id(一般是是零时区:取值UTC)
* @return string 转化时区后的时间
*/
public static String timeConvert(String sourceTime, String sourceId,
String targetId)
{
//校验入参是否合法
if (null == sourceId || "".equals(sourceId) || null == targetId
|| "".equals(targetId) || null == sourceTime
|| "".equals(sourceTime))
{
return "";
}
//校验 时间格式必须为:yyyy-MM-dd HH:mm:ss
String reg = "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$";
if (!sourceTime.matches(reg))
{
return "";
}
try
{
//时间格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//根据入参原时区id,获取对应的timezone对象
TimeZone sourceTimeZone = TimeZone.getTimeZone(sourceId);
//设置SimpleDateFormat时区为原时区(否则是本地默认时区),目的:用来将字符串sourceTime转化成原时区对应的date对象
df.setTimeZone(sourceTimeZone);
//将字符串sourceTime转化成原时区对应的date对象
Date sourceDate = df.parse(sourceTime);
//开始转化时区:根据目标时区id设置目标TimeZone
TimeZone targetTimeZone = TimeZone.getTimeZone(targetId);
//设置SimpleDateFormat时区为目标时区(否则是本地默认时区),目的:用来将字符串sourceTime转化成目标时区对应的date对象
df.setTimeZone(targetTimeZone);
//得到目标时间字符串
String targetTime = df.format(sourceDate);
return targetTime;
}
catch (ParseException e)
{
e.printStackTrace();
}
return "";
}
}
java时区转化相关工具方法的更多相关文章
- Java时区问题
Java时区相关 时间格式 UTC是以原子时计时,更加精准,适应现代社会的精确计时.不过一般使用不需要精确到秒时,视为等同.GMT是前世界标准时,UTC是现世界标准时.每年格林尼治天文台会发调时信息, ...
- Java parseInt_使用此方法得到的原始数据类型的一个特定的字符串
Java parseInt解释加方法示例 使用此方法得到的原始数据类型的一个特定的字符串. parseXxx()是一个静态方法,可以有一个参数或两个 java parseInt ...
- 将 Maven生成的java项目转化为支持 Eclipse IDE的项目
转自: http://www.xuebuyuan.com/1297046.html 将 Maven生成的java项目转化为支持 Eclipse IDE的项目 在前一篇文章中,我们使用maven创建 ...
- 如何重写Java中的equals方法
Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...
- java类加载机制及方法调用
类加载机制 概述 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading).验证(Verification).准备(Preparation).解析(Resoluti ...
- java获取文件大小的方法
目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的ava ...
- 几周内搞定Java的10个方法
不要将Java与JavaScript弄混了,Java的目标是“一次编译,到处调试”(呃,不对,是“到处运行”).简单来说,就是Java程序可以直接在任何设备上运行. Java语言是什么? 不管我们是否 ...
- Bean进行操作的相关工具方法
Bean进行操作的相关工具方法 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p ...
- Java基本概念:方法
一.简介 描述: Java中方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合,它在类中定义,属于类的成员,包含于类或对象中. 方法在程序中被创建后,在其他使用了该方法的地 ...
随机推荐
- ZH奶酪:PHP (爬虫)下载图片
原文地址:http://www.phpfensi.com/php/20140107/1128.html 通过图片地地址把图片保存到本址,这里我们直接通过readfile读取然后通过fopen保存即可, ...
- Windows系统Ionic安装教程/Ionic环境配置
原文链接:http://blog.csdn.net/superjunjin/article/details/43412017 参考文章 Cordova 3.x 基础(1) -- 环境搭建(Window ...
- HDU2717 Catch That Cow 【广搜】
Catch That Cow Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 算法笔记_230:运动员分组(Java)
目录 1 问题描述 2 解决方案 1 问题描述 有N个人参加100米短跑比赛.跑道为8条.程序的任务是按照尽量使每组的人数相差最少的原则分组.例如:N=8时,分成1组即可.N=9时,分成2组:一组 ...
- github使用入门
连接地址 github使用入门 连接地址: https://zhuanlan.zhihu.com/p/21193604?refer=passer
- 你所了解到的Web攻击技术
(1)XSS(Cross-Site Scripting,跨站脚本攻击):指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击.(2)SQL注入攻 ...
- Java多线程之锁优化策略
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6561264.html 锁的优化策略 编码过程中可采取的锁优化的思路有以下几种: 1:减少锁持有时间 例如:对 ...
- VIM设置代码折叠
今天看了一下别人写的程序的源代码,发现是用vim写的,代码中有趣是用vim来折叠代码,一开始我以为是用插件的,后来上网查了查,得出以下使用方面的技巧. 1. 折叠方式 可用选项来设定折叠方式: 可在V ...
- SQL Server 默认跟踪(Default Trace)获取某个Trace跟踪了哪些Event和column
检查Default Trace是否已经开启,如果返回Figure1中value为1,那就说明已经开启默认跟踪了:如果value为0表示关闭默认跟踪: --查询Default Trace是否开启 ; 如 ...
- CSDN开源夏令营 基于Compiz的switcher插件设计与实现之编译compiz源代码
在開始介绍之前先吐个嘈:上周我们暑期ACM集训開始了.平均下来基本上是一天一赛.有时还不止.又是多校联赛,又是CodeForces,又是TopCoder.又是BestCoder,又是AcDream.还 ...