首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android时区Ids与系统时区Ids问题不匹配

Android时区Ids与系统时区Ids问题不匹配
EN

Stack Overflow用户
提问于 2014-03-30 14:37:36
回答 1查看 790关注 0票数 1

我在Android的时区概念上工作。

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

代码语言:javascript
复制
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

代码语言:javascript
复制
 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             

我的代码是

代码语言:javascript
复制
 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的时区,应用程序的时区是可变的,所以时区不会改变。

如果我手动将时区替换为“非洲/的黎波里”,时区将被替换为这个时区。

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

EN

回答 1

Stack Overflow用户

发布于 2014-04-02 12:27:59

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

代码语言:javascript
复制
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;
    }

使用第一个函数,将带有yyy-mm-dd格式的任何日期作为字符串传递。该函数将返回gmt格式的实时日期。

我已经在用它了。它工作得很好,我希望它对你有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22741065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档