转载自:http://www.cnblogs.com/mailingfeng/archive/2012/06/20/2556326.html
TimeZone对象给我们的是原始的偏移量,也就是与GMT相差的微秒数,Java的Date对象里面存储着当前时刻到1970年1月1日0:00所经过的毫秒数,它与时区和地域没有关系(其实可以认为是GMT时间吧).而且还会告诉我们这个时区是否使用夏令时。有个这个信息,我们就能够继续将时区对象和日期格式化器结合在一起在其它的时区和其它的语言显示时间了。
国际化的时期显示了时区转换
让我们来看一个结合了国际化显示,时区和日期格式化的例子。表D为一个在迈阿密和巴黎拥有办公室的公司显示了当前的完整日期和时间。对于迈阿密的办公室,我们将在每个办公室里用英语显示完整的日期和时间。对于巴黎的办公室,我们将用法语显示完整的当前日期和时间。
import java.util.TimeZone;
import java.util.Date;
import java.util.Locale;
import java.text.DateFormat;
public class DateExample9 {
public static void main(String[] args) {
Locale localeEN = Locale.US;
Locale localeFrance = Locale.FRANCE;
TimeZone timeZoneMiami = TimeZone.getDefault();
TimeZone timeZoneParis = TimeZone.getTimeZone("Europe/Paris");
DateFormat dateFormatter = DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeEN);
DateFormat dateFormatterParis = DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeFrance);
Date curDate = new Date(); //以GMT格式记录当前计算机时间
System.out.println("Display for Miami office.");
// 显示"迈阿密时区"的英文格式显示名
System.out.println(timeZoneMiami.getDisplayName(localeEN));
// 配置美国本地日期格式化器的时区为"迈阿密时区(本地时区-美国)"
dateFormatter.setTimeZone(timeZoneMiami);
// 输出格式化的日期字符, 这时把当前GMT时间输出为"迈阿密所在时区"的时间
System.out.println(dateFormatter.format(curDate));
// 配置日期格式化器Format的时区为"巴黎的时区"
dateFormatter.setTimeZone(timeZoneParis);
// 输出"巴黎所在时区"的英文显示名
System.out.println(timeZoneParis.getDisplayName(localeEN));
// 输出当前GMT时间表现为"巴黎时区"下的时间
System.out.println(dateFormatter.format(curDate));
System.out.println("\nDisplay for Paris office.");
// 输出"迈阿密所在时区"的法文显示名
System.out.println(timeZoneMiami.getDisplayName(localeFrance));
// Set the timezone of the
// 配置巴黎本地日期格式化器的时区为"迈阿密所在时区"
dateFormatterParis.setTimeZone(timeZoneMiami);
// 把当前GMT时间用法文格式输出为"迈阿密所在时区"的时间
system.out.println(dateFormatterParis.format(curDate));
// 配置巴黎本地日期格式化器的时区为"巴黎所在的时区"
dateFormatterParis.setTimeZone(timeZoneParis);
// 输出"巴黎所在时区"的法文格式显示名
System.out.println(timeZoneParis.getDisplayName(localeFrance));
//
//当前GMT时间用法文格式输出为"巴黎所在时区"的时间 System.out.println(dateFormatterParis.format(curDate));
}
}
结果输出是:
Display for Miami office.
Eastern Standard Time
Friday, October 5, 2001 10:28:02 PM EDT
Central European Standard Time
Saturday, October 6, 2001 4:28:02 AM CEST
Display for Paris office.
GMT-05:00
vendredi 5 octobre 2001 22 h 28 GMT-04:00
GMT+01:00
samedi 6 octobre 2001 04 h 28 GMT+02:00
由上面例子可以知道:
1. 计算机内部记录的时间(Date date = new Date()), 为格林威治标准时(GMT). 即java.util.Date代表一个时间点,其值为距公元1970年1月1日 00:00:00的毫秒数。所以它可以认为是没有时区和Locale概念的。
2. 日期格式化类DateFormat, 对于不同地区的配置一般有两个点, 一个是Locale , 一个是TimeZone
前者(Locale)使DateFormat按所配置的地区特性来输出文字(例如中国,美国,法国不同地区对日期的表示格式不一样,中国可能是2001年10月5日)
后者(TimeZone)让DateFormat知道怎么去转换,去调整时间偏移度,从而得到符合配置的时区的时间.
(即假设取得当前时间(假设当前时区为GMT+0,即与new Date()最后转换的时间毫秒数一致)为2:00, 那么如果你配置DateFormat.setTimeZome("GMT+8"), 即北京时间的时区, 那么这时候格式化输出的就是10:00了, 因为系统对原始毫秒数进行了时间偏移调整(调到你设置的时区),即加多8小时,之后再格式化输出日期的字符串形式)
3. GMT与UTC的时区是一样的,都是以伦敦时间为基准. 而GMT+8时区就是北京时间所在时区.同一时刻的时间比GMT快8小时.
分享到:
相关推荐
在Java编程中,`TimeZone` 类是处理时区的关键组件,它允许我们获取和设置与特定地理位置相关的日期和时间偏移。时区不仅反映了地理位置相对于格林尼治标准时间(GMT)的偏移,还考虑了夏令时(DST)的调整。本文将...
Java对世界不同时区timezone之间时间转换的处理方法 Java对世界不同时区timezone之间时间转换的处理方法是指在不同的时区之间进行时间转换的...使用Java实现时区之间时间转换可以使用TimeZone类和DateFormat类等。
Java使用`TimeZone.getAvailableIDs()`方法获取系统中所有可用的时区ID列表,这些ID通常基于ISO 3166国家代码和Olson数据库。 描述中提到的“注册表文件”可能是指Windows操作系统中的时区信息存储位置,因为时区...
1. **Java时区设置**: 当程序中使用`new Date()`获取当前时间时,默认采用的是JVM的时区设置。如果开发者在位于东八区(GMT+8)的地区,但JVM默认的时区不是这个,那么时间会显示错误。可以通过创建`Calendar`实例...
如果需要处理不同时区的日期,可以使用 `TimeZone` 类。例如,设置为美国东部时间: ```java TimeZone easternTimeZone = TimeZone.getTimeZone("America/New_York"); Calendar easternCal = Calendar....
`TimeZone`类是Java中处理时区的关键,它代表了世界上的特定时区。时区的设置可以影响到时间的解析和格式化。 在Java中,`TimeZone.getDefault()`方法会返回JVM当前运行所在操作系统的默认时区。这可能会导致问题,...
开发者尝试通过`DateFormat`和`TimeZone`类来解决这个问题,例如,通过`DateFormat.getDateTimeInstance()`获取日期时间实例,并使用`TimeZone.getTimeZone("Asia/Shanghai")`来设置上海时区,确保时间转换正确。...
- **`java.util.TimeZone`**:提供时区信息,`SimpleTimeZone`是一种基本的时区实现。 - **`java.util.Currency`**:提供货币符号和汇率信息,用于货币的格式化处理。 ### 二、国际化与`MessageFormat`类 `...
Java中的`TimeZone`类可以用来处理不同时区的转换。默认情况下,`Calendar`使用系统时区,但可以通过`setTimeZone()`方法设置特定时区。 总的来说,掌握正则表达式可以帮助你有效地处理文本数据,而熟练运用`Date`...
##### 方法二:使用`SimpleDateFormat`和`TimeZone` ```java // 创建SimpleDateFormat实例 DateFormat cstFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); DateFormat gmtFormat = new SimpleDateFormat(...
Java中的`TimeZone`类提供了对时区的表示,而`SimpleDateFormat`在格式化日期时可以指定时区。 示例代码: ```java DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); ``` 在这个例子中,...
`TimeZone`类提供了表示各种时区的功能,`getTimeZone`方法用于获取特定时区的`TimeZone`对象。在这里,我们设置为GMT时区: ```java sdf.setTimeZone(TimeZone.getTimeZone("GMT")); ``` #### 输出GMT时间 再次...
对于模拟器而言,可以通过命令行参数来指定时区,如通过`-timezone "Asia/Taipei"`来设置台北时间为当前时区。对于实际设备来说,则需要通过系统设置来进行更改。此外,在代码层面,可以通过以下方式更改时区: ```...
而对于需要进行更复杂的日期时间操作,比如时区转换等,则可能需要引入java.util.TimeZone类。 此外,内容中提到的System.currentTimeMillis()是一个静态方法,返回当前时间与1970年1月1日00:00:00 GMT之间的时间差...
- **`TimeZone`**:处理时区问题。 这些API使得开发者可以轻松地处理日期和时间相关的逻辑。 #### 十四、Servlet技术 Servlet是Java EE的一部分,用于构建动态Web应用程序: - **部署描述符**:`web.xml` 文件...
- `TimeZone`:表示时区信息,可以获取和设置时区。 此外,还有如`GregorianCalendar`、`DateFormat`和`SimpleDateFormat`,用于更复杂的日期格式化和解析。 总之,这些Java类构成了强大的工具集,帮助开发者处理...
- TIMESTAMP WITH TIME ZONE 和 TIMESTAMP WITH LOCAL TIME ZONE 用于处理时区信息。 在实际编程中,选择使用哪种类主要取决于需求的精度和场景。如果只需要日期,可以选择 `java.sql.Date`;如果需要精确到毫秒,...
`Locale`类代表地理位置和文化信息,`TimeZone`类则描述时区,`DateFormat`和`SimpleDateFormat`类用于格式化日期和时间的显示。 总的来说,这些Java常用类为开发者提供了丰富的工具,涵盖了对象基础、字符串处理、...
若要获取特定时区的时间,可以传递一个`TimeZone`对象给`Calendar.getInstance()`。例如,获取"GMT-8:00"(太平洋时间)的时间: ```java TimeZone zone = TimeZone.getTimeZone("GMT-8:00"); Calendar cal = ...