Java中对日期的处理

Java 在国际化和本地化方面做得相当出色。在这篇文章中我们主要向大家介绍如何使用 java 向不同时区或不同国家的人们显示时间。

本文中主要涉及的类为

Java.util.Date

Java.util.DateFormat

Java.util.Locale

Java.util.TimeZone

首先让我们来熟悉以下Locale类,请看下面的代码:

import  java.util.Locale; 

public   class  LocaleTest 

 
public LocaleTest() 

  }
 

 
public static void main(String[] args) 

   Locale USLocale
=new Locale("en","US"); 

   Locale ChinaLocale
=new Locale("zh","CN"); 

   System.out.println(USLocale.getDisplayName(Locale.CHINA));
//使用中文显示英语Locale对象的displayName 

   System.out.println(ChinaLocale.getDisplayName(Locale.US)); 

  }
 

}
 

 

输出结果为:

英文 (美国)

Chinese (China)

Locale类的一个实例通常包含了一个国家的语言信息和国家代码,(语言代码和国家代码的详情请查询下列网址)

Language Codehttp://www.ics.uci.edu/pub/ietf/http/related/iso639.txt

Country Codehttp://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html

 

如何按照各个国家的习惯来展示时间呢?下面的例子可能对你有所启发。

 

import  java.util.Locale; 

import  java.text.DateFormat; 

import  java.util.Date; 

public   class  LocaleTest 

 
public LocaleTest() 

  }
 

 
public static void main(String[] args) 

   Date dt
=new Date(); 

   DateFormatdfCN
=DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA); 

   DateFormat dfUS
=DateFormat.getDateInstance(DateFormat.FULL,Locale.US); 

   System.out.println(dfCN.format(dt)); 

   System.out.println(dfUS.format(dt)); 

  }
 

}
 

 

输出结果为:

20041231 星期五

Friday, December 31, 2004

TimeZone类的实例包含了一个与格林威治标准时间(GMT)相比较得出的以微秒为单位的时区偏移量,而且它还处理夏令时。那么如何知道TimeZone类支持哪些时区呢呢,这里我写了一个很简单的例子:

输出结果就请大家自己执行后看啦!

import  java.util.Locale; 

import  java.util.TimeZone; 

import  java.text.DateFormat; 

import  java.util.Date; 

public   class  LocaleTest 

  
public LocaleTest() 

  }
 

  
public static voidmain(String[] args) 

    TimeZonedefaultTimeZone
=TimeZone.getDefault(); 

    String []ids
=TimeZone.getAvailableIDs(); 

    
for(inti=0;i<ids.length;i++)

     System.out.println(ids[i]); 

    }
 

  }
 

}
 

 

  下面简单介绍一下如何使用TimeZone类。

  

import  java.util.Locale; 

import  java.util.TimeZone; 

import  java.text.DateFormat; 

import  java.util.Date; 

  

public   class  LocaleTest 

  
public LocaleTest() 

  }
 

  

  
public static voidmain(String[] args) 

  

    TimeZone defaultTimeZone
= TimeZone.getDefault(); 

    TimeZone ChinaTimeZone 
=TimeZone.getTimeZone("Asia/Chongqing"); 

    TimeZone EuropeTimeZone
= TimeZone.getTimeZone("Europe/London"); 

   System.out.println(defaultTimeZone.getDisplayName()); 

    System.out.println(defaultTimeZone.getRawOffset());
//计算与格林威治时间的差别 

   System.out.println(defaultTimeZone.useDaylightTime()); 

   System.out.println(
""); 

   System.out.println(ChinaTimeZone.getDisplayName()); 

   System.out.println(ChinaTimeZone.getRawOffset()); 

    System.out.println(ChinaTimeZone.useDaylightTime()); 

   System.out.println(
""); 

   System.out.println(EuropeTimeZone.getDisplayName()); 

   System.out.println(EuropeTimeZone.getRawOffset()); 

   System.out.println(EuropeTimeZone.useDaylightTime()); 

  }
 

}
 

 

输出结果为:

中国标准时间

28800000

false

中国标准时间

28800000

false

格林威治时间

0

true

学习到这里,我们可以做这样一件事情,假设我们在英国伦敦有一个公司,在中国重庆有另外一个公司,我们显然需要按照这两个公司所在的时区和地域进行时间的显示。如何实现呢?下面是一段示例代码。

import  java.util.Locale; 

import  java.util.TimeZone; 

import  java.text.DateFormat; 

import  java.util.Date; 

  

public   class  LocaleTest 

  
public LocaleTest() 

  }
 

  

  
public static voidmain(String[] args) 

    Date dt
=new Date(); 

    LocaleLondonLocale
=Locale.ENGLISH; 

    LocaleChongqingLocale
=Locale.CHINA; 

    DateFormatLondonDateFormat
=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,LondonLocale); 

    DateFormatChongqingDateFormat
=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,ChongqingLocale); 

   System.out.println(LondonLocale.getDisplayName()); 

    System.out.println(LondonDateFormat.format(dt)); 

   System.out.println(
""); 

   System.out.println(ChongqingLocale.getDisplayName()); 

   System.out.println(ChongqingDateFormat.format(dt)); 

  }
 

}
 

 

输出结果为:

英文

Friday, December 31, 2004 4:12:07 PM CST

中文 (中国)

20041231 星期五 下午161207 CST

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值