Android时区ID与系统时区ID问题不匹配

时间:2014-03-30 06:37:36

标签: android datetime timezone

我正在研究Android中的时区概念。

我想通过从应用程序中的App Variable获取时区来更改Android平板电脑的时区。我将系统时区作为变量值,如

Dateline Standard Time
UTC-11
Samoa Standard Time
Hawaiian Standard Time
Alaskan Standard Time  
Pacific Standard Time (Mexico)
Pacific Standard Time
US Mountain Standard Time
Mountain Standard Time (Mexico)
Mountain Standard Time
Central America Standard Time
Central Standard Time
Central Standard Time (Mexico)
Canada Central Standard Time
SA Pacific Standard Time

从Android案例中,我得到的时区ID就像

 Africa/Harare
 Africa/Johannesburg
 Africa/Kigali
 Africa/Lubumbashi
 Africa/Lusaka
 Africa/Maputo
 Africa/Maseru
 Africa/Mbabane
 Africa/Tripoli
 Asia/Amman
 Asia/Beirut
 Asia/Istanbul
 Asia/Jerusalem
 Asia/Nicosia
 Asia/Tel_Aviv
 CAT
 EET
 Egypt
 Etc/GMT-2
 Europe/Chisinau
 Europe/Helsinki             

我的代码是

 if (mCalendar != null) {
         mCalendar = Calendar.getInstance();
     }
     else
     {               
         String[] allTimeZones = TimeZone.getAvailableIDs();
         Arrays.sort(allTimeZones);
         for (int i = 0; i < allTimeZones.length; i++) {
         System.out.println(allTimeZones[i]);
         }  

        TimeZone tz = TimeZone.getTimeZone(String.valueOf(Jordan Standard Time));           
         mCalendar = Calendar.getInstance(tz);  
         String name = tz.getID();
         System.out.println("TimeZone   "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " + name);                        
     }

由于“乔丹标准时间”因应用程序而异,不像平板电脑的时区ID,时区不会改变。

如果我手动用'Africa / Tripoli'替换时区,则时区将替换为此时区。

我现在的问题是我想将系统时区转换为平板电脑时区ID并将其显示在Android应用程序中。

1 个答案:

答案 0 :(得分:0)

如果您从Android手机更改时区,请使用此功能显示GMT时间显示。

public static String GetDateForGMTDate(String dateString) {
        SimpleDateFormat formatter = new SimpleDateFormat(
                "yyyy-mm-dd");
        SimpleDateFormat formatter1 = new SimpleDateFormat(
                "yyyy-mm-dd");
        Date date = null;
        try {

            date = formatter.parse(dateString);
            System.out.println(date);
            System.out.println(formatter.format(date));
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            Log.i("Time zone", "gettime=" + cal.getTime());
            cal.add(Calendar.MINUTE, (-1 * getTimeZoneDifference()));
            Log.i("Time zone", "after gmt +gettime=" + cal.getTime());
            date = cal.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return formatter1.format(date);
    }



public static final int getTimeZoneDifference() {
        long currentTime = System.currentTimeMillis();

        int gmtcurrentOffset = TimeZone.getDefault().getOffset(currentTime);
        int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime);
        int minuteDifference = (((gmtOffset - gmtcurrentOffset) / 1000) / 60);
        return minuteDifference;
    }

使用1st函数并将yyy-mm-dd formate作为字符串传递给任何日期。并且该函数将返回gmt formate实际日期时间。

我已经用过了。 它的工作正常。我希望它对你有用。