骑猪闯天下

J2ME随笔,记录成长的脚步

统计

留言簿(3)

阅读排行榜

评论排行榜

[J2ME-原创] 时区TimeZone和时间

实现时间的代码如下:

    private int minute = 0, hour = 0,second = 0;
    
private
 String strminute, strhour, strsecond;
   
/**
    * 画时间-
    * 
@param focusTemp
    * 
@param
 gr
    
*/

   
public void drawTime(Graphics gr) {
       Calendar cal  
=
 Calendar.getInstance();    

           second 
=
cal.get(Calendar.SECOND);        
        minute 
=
 cal.get(Calendar.MINUTE);
        hour 
=
 cal.get(Calendar.HOUR_OF_DAY);    
        
        strsecond 
=
 Integer.toString(second);        
        strminute 
=
 Integer.toString(minute);
        strhour 
=
 Integer.toString(hour);
        
        
if(second<10
)
            strsecond
="0"+
strsecond;
        
if(minute<10
)
            strminute
="0"+
strminute;
        
if(hour<10
)
            strhour
="0"+
strhour;

        Font aa
=
gr.getFont();
        gr.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM));
        gr.setColor(
0xFFD700
);
        gr.drawString(strhour 
+ ":" + strminute , SCREEN_WIDTH-5060
);
        gr.setFont(aa);
   }

一般情况下,使用这些就足够了。

如果更深一步探索,需要对时区控制的话,见下面:
1.这样获取的时间,无论电脑上调试时还是在真机上,显示的都是一样的
TimeZone china=TimeZone.getTimeZone("GMT+08:00");
        Calendar cal1  
=
 Calendar.getInstance(china);    
        
int second =
cal1.get(Calendar.SECOND);        
        
int minute =
 cal1.get(Calendar.MINUTE);
        
int hour =
 cal1.get(Calendar.HOUR_OF_DAY);    
        
        String strsecond 
=
 Integer.toString(second);        
        String strminute 
=
 Integer.toString(minute);
        String strhour 
=
 Integer.toString(hour);
        System.out.println(
"北京时间 "+strhour + ":" + strminute +":"+strsecond);//GMT+08:00

        

TimeZone就是对时区的控制,

在Eclipse开发时,如果不设置时区的话,用Calendar获取的时间是默认的格林威治标准时间
在Eclipse开发时,如果设置时区的话,    用Calendar获取的时间是设置的那个时区的时间

举例如下:
A>. 社区的设置
   //获得实际手机使用区域的默认时区
   TimeZone defaultZone = TimeZone.getDefault();
   
//获得默认时区对象的ID标识

   System.out.println(defaultZone.getID());//UTC
        
   
//取得中国的时区

        TimeZone china=TimeZone.getTimeZone("GMT+08:00");
        System.out.println(china.getID());
//GMT+08:00

B >. 时区不同,时间的不同

        TimeZone china=TimeZone.getTimeZone("GMT+08:00");
        System.out.println(china.getID());
//GMT+08:00

        prompt3=china.getID();
        
        Calendar cal1  
=
 Calendar.getInstance(china);    
        
int second =
cal1.get(Calendar.SECOND);        
        
int minute =
 cal1.get(Calendar.MINUTE);
        
int hour =
 cal1.get(Calendar.HOUR_OF_DAY);    
        
        String strsecond 
=
 Integer.toString(second);        
        String strminute 
=
 Integer.toString(minute);
        String strhour 
=
 Integer.toString(hour);
        System.out.println(
"东八时区ID"+prompt3);//GMT+08:00

        System.out.println("北京时间 "+strhour + ":" + strminute +":"+strsecond);//
    
        
        
        TimeZone defatime 
=
TimeZone.getDefault();
        System.out.println(defatime.getID());
//GMT+08:00

        prompt4=defatime.getID();
        
        Calendar cal2  
=
 Calendar.getInstance(defatime);    
        second 
=
cal2.get(Calendar.SECOND);        
        minute 
=
 cal2.get(Calendar.MINUTE);
        hour 
=
 cal2.get(Calendar.HOUR_OF_DAY);    
        
        strsecond 
=
 Integer.toString(second);        
        strminute 
=
 Integer.toString(minute);
        strhour 
=
 Integer.toString(hour);
        System.out.println(
"默认时区ID"+prompt4);//UTC

        System.out.println("默认时间 "+strhour + ":" + strminute +":"+strsecond);//
这两个时间,在手机上显示的是一样的,但是在Eclipse开发时,是相差8个小时的。

应用:
在电脑上的模拟器上,正因为时区id不同,可以作为简单的反模拟器使用的一个方法,只要时区id不同,就不然程序启动。

2.API中的使用方法:
返回 TimeZonejava.util 中的方法
static TimeZone TimeZone.getDefault()
          获取此主机的默认 TimeZone
 TimeZone Calendar.getTimeZone()
          获得时区。
 TimeZone GregorianCalendar.getTimeZone()
           
static TimeZone TimeZone.getTimeZone(String ID)
          获取给定 ID 的 TimeZone
 

参数类型为 TimeZonejava.util 中的方法
static Calendar Calendar.getInstance(TimeZone zone)
          使用指定时区和默认语言环境获得一个日历。
static Calendar Calendar.getInstance(TimeZone zone, Locale aLocale)
          使用指定时区和语言环境获得一个日历。
 boolean TimeZone.hasSameRules(TimeZone other)
          如果此区域和另一个区域具有相同的规则和偏移量,也就是说,如果此区域只可能在 ID 上与另一个区域不同,则返回 true。
 boolean SimpleTimeZone.hasSameRules(TimeZone other)
          如果此时区与另一时区具有相同的规则和偏移量,则返回 true
static void TimeZone.setDefault(TimeZone zone)
          设置由 getDefault 方法返回的 TimeZone
 void Calendar.setTimeZone(TimeZone value)
          使用给定的时区值来设置时区。
 void GregorianCalendar.setTimeZone(TimeZone zone)
           
 

参数类型为 TimeZonejava.util 中的构造方法
Calendar(TimeZone zone, Locale aLocale)
          构造一个带有指定时区和语言环境的 Calendar。
GregorianCalendar(TimeZone zone)
          在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar
GregorianCalendar(TimeZone zone, Locale aLocale)
          在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar



3.TimeZone时区的扩展知识

java.util.TimeZone,

API简述:

TimeZone
表示时区偏移量,也可以计算夏令时。

通常,使用 getDefault 获取 TimeZonegetDefault 基于程序运行所在的时区创建 TimeZone。例如,对于在日本运行的程序,getDefault 基于日本标准时间创建 TimeZone 对象。

也可以用 getTimeZone 及时区 ID 获取 TimeZone 。例如美国太平洋时区的时区 ID 是 "America/Los_Angeles"。因此,可以使用下面语句获得美国太平洋时间 TimeZone 对象:

 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
可以使用 getAvailableIDs 方法来对所有受支持的时区 ID 进行迭代。可以选择受支持的 ID 来获得 TimeZone。如果想要的时区无法用受支持的 ID 之一表示,那么可以指定自定义时区 ID 来生成 TimeZone。自定义时区 ID 的语法是:
 CustomID:
         GMT Sign Hours : Minutes
GMT Sign Hours Minutes
GMT Sign Hours
Sign: 下面之一
+ -
Hours:
Digit
Digit Digit
Minutes:
Digit Digit
Digit: 下面之一
0 1 2 3 4 5 6 7 8 9
Hours 必须在 0 至 23 之间,Minutes 必须在 00 至 59 之间。例如,"GMT+10" 和 "GMT+0010" 分别意味着比 GMT 提前 10 小时和 10 分钟。

格式是与区域无关的,并且数字必须取自 Unicode 标准的 Basic Latin 块。没有夏令时转换安排可以用自定义时区 ID 指定。如果指定的字符串与语法不匹配,就使用 "GMT"

当创建一个 TimeZone 时,指定的自定义时区 ID 采用下面的语法进行标准化:

 NormalizedCustomID:
         GMT Sign TwoDigitHours : Minutes
Sign: 下面之一
+ -
TwoDigitHours:
Digit Digit
Minutes:
Digit Digit
Digit: 下面之一
0 1 2 3 4 5 6 7 8 9
例如,TimeZone.getTimeZone("GMT-8").getID() 返回 "GMT-08:00"。
GMT简介:

GMT(Greenwich Mean Time)是格林尼治平时:

  由于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度所影响。为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平太阳时称为世界时(UT0),又叫格林尼治平时(GMT)。

  格林尼治标准时间

  格林尼治标准时间(GMT,旧译“格林威治平均时间”或“格林威治标准时间”)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。

  理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。

  地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。现在的标准时间——协调世界时(UTC)——由原子钟提供。

  自1924年2月5日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。

  中文维基百科的编辑历史记录时间,采用的就是格林尼治标准时间。
 

[End]  骑猪闯天下

posted on 2010-04-14 15:59 骑猪闯天下 阅读(10386) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: