中国在行政上对全国各地都定义一个统一的时区,也就是我们通常所说的"北京时间"。而美国大陆本土有 5 个主要时区(Arizona州单独一个时区),再加夏威夷时区和阿拉斯加时区。国土面积不大的澳大利亚竟有 5 个时区。但是如果我们所开发的应用是要考虑支持多个时区共享使用时,我们需要对 Java 的时区要有一个了解。例如,如何将一个时区下定义的时间转换到另一个时区来显示,等等问题。
全球时区参考
http://greenwichmeantime.com/time-zone/
最近客户要求在对于取日期要根据 申请者 所在时区的时间来计算。
例如 一个来自美国西部CA州的人, 处在美国东部IL州, Server不管在哪里。
CurrentDate(当前时间) 是应该取 以Server时间为准,换算成申请者来自与州的时间。
因为当前时间可能相差一天。
// 现有代码,好多取当前时间直接 new Date() 只是取当前Server的时间
new Date();
Java的Date型没有对 timezone 支持,而现在代码日期都是Date, DB也是存Date型
我们都知道使用 calendarInstance.getTime() 来转换成 Date
// 使用指定时区 PST(太平洋时区) 和默认语言环境获得一个日历。
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("PST"));
// 使用默认时区和语言环境获得一个日历。
Calendar calendar2 = Calendar.getInstance();
System.out.println(calendar.getTime() + " " + calendar.getTimeInMillis());
System.out.println(calendar2.getTime() + " " + calendar2.getTimeInMillis());
惊讶的发现, 直接这样转换, 打出的来结果是一样的.
后来自己的代码写这样, 相信大家在写代码的时候也遇到过类型的问题,如果有更好的方法, 请不吝赐教
private static Map<String, String> US_TimeZoneMap = null;
/**
* Get right timezone date by calendar
*
* @param stateCode state name
* @return Date timezoneDate
*/
@SuppressWarnings("deprecation")
public static Date getTimezoneDate(String stateCode)
{
Calendar calendar = Calendar.getInstance(getTimezone(stateCode));
Date date = new Date(calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
return date;
}
/**
* Get timezone type by state name
*
* @param stateCode
* @return TimeZone
*/
public static TimeZone getTimezone(String stateCode)
{
return TimeZone.getTimeZone(initializeTimezoneMap().get(stateCode));
}
/**
* Initialize a map store timezone info
*
* @return Map timezone Map
*/
public static Map<String, String> initializeTimezoneMap()
{
if (US_TimeZoneMap == null)
{
US_TimeZoneMap = new HashMap<String, String>();
US_TimeZoneMap.put("CA", "PST");
US_TimeZoneMap.put("CO", "MST");
// ...
US_TimeZoneMap.put("IL", "CST");
US_TimeZoneMap.put("GA", "EST");
}
return US_TimeZoneMap;
}
这篇文章介绍java timezone, 很详细
http://www.ibm.com/developerworks/cn/java/l-datetime/part2/index.html
还有个开源的Java date and time classes -----
Joda.
http://joda-time.sourceforge.net/index.html
引用
Joda-Time has been created to radically change date and time handling in Java. The JDK classes Date and Calendar are very badly designed, have had numerous bugs and have odd performance effects. ...
// get current moment in default time zone
DateTime dt = new DateTime();
// translate to London local time
DateTime dt2 = dt.withZone(DateTimeZone.forID("America/Los_Angeles"));
// This is similar in concept to the default time zone of the java.util.TimeZone class.
DateTimeZone defaultZone = DateTimeZone.getDefault();
DateTimeZone.setDefault(myZone);
试用了下,感觉还不错,支持TIMEZONE挺好的。 以后可以考虑使用。
有的国外项目直接用joda的 Datetime取代SUN 的Date
分享到:
相关推荐
php报时区错误,按照网上说的改时间date.timezone... You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still
Oracle的Timestamp with Time Zone类型与Java的交互是数据库编程中一个重要的知识点,特别是在处理跨越时区的数据时。本文将深入探讨这两个概念以及它们在实际应用中的互动。 Oracle的Timestamp with Time Zone类型...
`date()`函数则用于格式化和输出日期和时间,可以根据`date.timezone`设置的结果来显示相应时区的时间。 `extract()`函数虽然不是专门处理日期和时间的,但它是一个非常实用的数组处理函数,可以将数组中的键值对...
date.timezone设置php5默认date.timezone为utc,改为date.timezone = PRC即可解决时间相差八小时的问题,但我在php的官方文档中看了半天也没找到这个参数啊
《Microsoft Date and Time Picker 控件6.0详解》 在Windows应用程序开发中,日期和时间选择功能是一项不可或缺的元素,Microsoft Date and Time Picker Control 6.0便是为此目的设计的控件。它允许用户在界面上...
"前端项目-moment-timezone.zip" 是一个专门针对时区处理的前端项目,它基于著名的JavaScript库Moment.js,并扩展了对时区支持的功能。这个项目旨在帮助开发者更准确、方便地分析和展示全球各地的时刻。 首先,我们...
**前端项目-timezone-js** 是一个基于Olson时区数据的JavaScript库,专门用于处理和显示全球不同时区的时间。这个库为Web开发者提供了一种简单有效的方式来处理时区转换和时间显示,尤其是在构建需要跨时区交互的Web...
You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely ...
(C++)此代码在Windows Mobile平台下VS2005调试通过,实现了Date and Time Picker控件的简单功能。此控件我在MFC和WIN32下各做了个DEMO。如果对你有用记得回来评论哦.....
echo function_exists(date_default_timezone_set). ;//在这他总是返回1,这函数是判断这里面的字符是不是一个定义了的函数名 echo date('Y-m-d H:i:s'). ;//默认时区的时间 echo date_default_timezone_set...
**Angular Date Time 插件详解** Angular Date Time 是一个基于 AngularJS 的插件,它为开发者提供了方便的方式来处理日期和时间。在Web开发中,尤其是使用AngularJS框架时,处理日期和时间通常是一项复杂的任务,...
微软的中国农历日期和时间组件(Microsoft.Chinese.Date&Time)是专为Windows操作系统设计的一款实用工具,旨在提供农历日期和时间的显示功能。这款软件是微软为了满足在中国及全球华人社区用户的需求而开发的,它...
在Laravel框架中,`timezone`是一个非常关键的设置,它影响着整个应用程序中的日期和时间处理。`timezone`配置允许开发者指定应用默认时区,确保时间显示与用户所在的地理位置相匹配,提供更好的用户体验。本篇文章...
此外,`TimeZone` 的 `useDaylightTime()` 方法可以用来判断时区是否使用夏令时,但实际判断夏令时是否生效应依赖于 `inDaylightTime(Date time)` 方法。 总的来说,`TimeZone` 类在Java中提供了处理日期和时间时区...
标题中的"boost_date_time-vc100-mt-1_49.dll"是一个动态链接库(DLL)文件,属于Boost库的一部分,专门用于日期和时间处理。Boost库是一个广泛使用的C++库集合,旨在提升C++的标准库功能,提供跨平台的、高质量的、...
在本文中,我们将深入探讨如何使用Delphi编程语言无控件地实现一个TimeZone世界时间对照程序。这个程序的目的是在不依赖任何特定图形用户界面组件的情况下,帮助用户查看选定时间在全球主要城市的时间对应情况,这...
const timeZone = require ( 'mongoose-timezone' ) ;const Schema = new mongoose . Schema ( { date : Date , subDocument : { subDate : { type : Date , } , } ,} ) ;// If no path is given, all date fields ...