2012-01-12 97 views
3

嗨我想从语言环境获取时区。我的代码是如何从Android的语言环境值获取时区?

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); 
    } 


} 
} 

但它不起作用。如果我将区域设置值转换为字符串值意味着它是否工作? 以及如何转换?是否有可能获得时区?任何人都可以告诉我。提前致谢。

回答

3

大多数应用程序将使用getDefault(),它会根据程序运行的时区返回TimeZone。

你也可以通过id获得一个特定的TimeZone。

查看here了解更多信息。

0

不要这样做。从用户自己获取时区。要求他们设置时区偏移量。英语加拿大有一个区域,但有六个时区!美国大陆是一个地区,但至少有4个或5个时区。

相关问题