Как получить часовой пояс из значения Locale в Android? - PullRequest
3 голосов
/ 12 января 2012

Привет, я хочу получить часовой пояс из локали.Мой код

    package com.my.country;

    import java.text.DateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Locale;
    import java.util.Map;
    import java.util.StringTokenizer;
    import java.util.TimeZone;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.TextView;

    public class StoreCountry extends Activity 
   {
String countryname="";
Spinner spinnerAvailableID,availableCurrencycode;
TextView textTimeZone,countrycodetxt;
ArrayAdapter<String> timeAdapter,codeAdapter;

   @Override

   public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   setContentView(R.layout.select);

   String selectString = getString(R.string.select);

   spinnerAvailableID = (Spinner)findViewById(R.id.availableID);
   availableCurrencycode = (Spinner)findViewById(R.id.availablecurrency);

   textTimeZone = (TextView)findViewById(R.id.timezone);
  countrycodetxt = (TextView)findViewById(R.id.countrycode);


   ArrayList<String> timeArray = new ArrayList<String>();
   timeArray.add(selectString);
   String[] idArray = TimeZone.getAvailableIDs();
   for(int i=0;i<idArray.length;i++)
   {
       String mycon=idArray[i];
       timeArray.add(mycon);
   }
   System.out.println(timeArray);
   timeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, timeArray);
   timeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   spinnerAvailableID.setAdapter(timeAdapter);
   spinnerAvailableID.setOnItemSelectedListener(new OnItemSelectedListener()
   {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view,int position, long id) 
        {
            String selectedId = (String)(parent.getItemAtPosition(position));
            System.out.println(selectedId);
            TimeZone tz = TimeZone.getTimeZone(selectedId);
            String timezone=TimeZone.getTimeZone(tz.getID()).getDisplayName(false,TimeZone.SHORT);
            String timezonename=TimeZone.getTimeZone(tz.getID()).getDisplayName(false,TimeZone.LONG);
            Log.d("Tag","TimeZone : "+timezone+"\t"+timezonename);
            textTimeZone.setText(timezone+"\t"+timezonename);

            DateFormat df = DateFormat.getTimeInstance();
            df.setTimeZone(TimeZone.getTimeZone(timezone));
            String gmtTime = df.format(new Date());
            System.out.println(gmtTime);

            StringTokenizer st2 = new StringTokenizer(selectedId,"/");  
            while(st2.hasMoreTokens())
            {
                countryname= st2.nextToken();
                System.out.println(countryname);
                break;
            }


        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0)
        {
            // TODO Auto-generated method stub

        }});


   ArrayList<String> codeArray=new ArrayList<String>();
   codeArray.add(selectString);
   CurrencySymbol cs = new CurrencySymbol();
   Map<String, String> currencies = cs.getAvailableCurrencies();
   for (String country : currencies.keySet()) 
   {      
       String currencyCode = currencies.get(country);
       codeArray.add(currencyCode);
       System.out.println(country + " => " + currencyCode);
   }       
   codeAdapter= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, codeArray);
   codeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   availableCurrencycode.setAdapter(codeAdapter);
   availableCurrencycode.setOnItemSelectedListener(new OnItemSelectedListener()
   {
    @Override
    public void onItemSelected(AdapterView<?> parent1, View view1, int position1,long id1) 
    {
        String selectedCode = (String)(parent1.getItemAtPosition(position1));
        System.out.println(selectedCode);
        countrycodetxt.setText(selectedCode);
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) 
    {       

    }     });

   /*ArrayList<String> countryArray = new ArrayList<String>();
   timeArray.add(selectString);*/


   Locale[] myCountry = Locale.getAvailableLocales();
   for(int i=0;i<myCountry.length;i++)
   {
       Locale mycon=myCountry[i];

       String name1=mycon.getDisplayName();
       //timeArray.add(mycon);
      // String name=mycon.getDisplayCountry(mycon);

       System.out.println("locale name--->"+mycon);
       //System.out.println("country name--->"+name);
       System.out.println("country name =--->"+name1);

       TimeZone time = TimeZone.getTimeZone(name1);
        String timezone=TimeZone.getTimeZone(time.getID()).getDisplayName(false,TimeZone.SHORT);
        System.out.println("time zone"+timezone);
      // String time=mytime.getDisplayName();
     //  System.out.println("time zone---->"+mytime);
   }


}
}

Но он не работает.Если я конвертирую значение Locale в значение String, значит это работает?И как конвертировать это?И возможно ли получить часовой пояс?Кто-нибудь может сказать мне.Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 12 января 2012

В большинстве приложений используется getDefault(), который возвращает часовой пояс на основе часового пояса, в котором работает программа.

Вы также можете получить определенный часовой пояс по идентификатору.

См. здесь для получения дополнительной информации.

0 голосов
/ 08 июля 2012

Не делай этого. Получите часовой пояс от самого пользователя. Попросите их установить смещение часового пояса. Английский Канада имеет одну локаль, но шесть часовых поясов! Материковая часть Соединенных Штатов является одной локалью, но имеет как минимум 4 или 5 часовых поясов.

...