【问题标题】:How to Show Toast of selected TimeZone in UTC如何在 UTC 中显示所选时区的 Toast
【发布时间】:2016-02-01 12:15:06
【问题描述】:

我想从下图所示的微调器列表中显示所选时区的 UTC 时间的 toast 消息。

下面是我的代码:

 Spinner tz;
 tz = (Spinner) findViewById(R.id.edit);


    String[] idArray = TimeZone.getAvailableIDs();
    ArrayAdapter<String> idAdapter = new ArrayAdapter<>(getApplicationContext(),R.layout.custom,idArray);
    idAdapter.setDropDownViewResource(R.layout.custom);
    tz.setAdapter(idAdapter);


    for(int i = 0; i < idAdapter.getCount(); i++) {
        if(idAdapter.getItem(i).equals(TimeZone.getDefault().getID())) {
             tz.setSelection(i);


        }
    }

我已经尝试过了,但无法得到我的结果

http://developer.android.com/reference/java/util/TimeZone.html#getDisplayName%28boolean

【问题讨论】:

    标签: java android datetime timezone


    【解决方案1】:

    您必须为此使用setOnItemSelectedListener。示例用法如下所示。

    tz.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
    
                SimpleDateFormat df = new SimpleDateFormat("dd MMM HH:mm a", Locale.getDefault());
                df.setTimeZone(TimeZone.getTimeZone(idAdapter.getItem(position))); //format in given timezone
                String strDate = df.format((new Date()).getTime());
                //Display the Toast
                Toast.makeText(getApplicationContext(), strDate, Toast.LENGTH_LONG).show();
            }
    
            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }
    
        });
    

    注意,onItemSelected 方法在构建视图时也会被调用,所以可以考虑将它放在 onCreate() 方法调用中。

    希望这会有所帮助。

    【讨论】:

    • 使用此代码后出现此错误 >java.lang.IndexOutOfBoundsException: Invalid index 583, size is 583 on the toast
    • 这应该可以完成这项工作。
    • 非常感谢,这正是我想要的。但最后一个问题我正在使用日期选择器来选择日期如何使用前一个日期来计算它的 UTC
    • 你的意思是UTC 0:00
    • 如果您想要 2016 年 1 月 31 日,则只需在 2016 年 1 月 31 日传递 Date 实例。您可能需要在此处使用日历。查看其文档以了解如何将其设置为特定日期(提示:使用 set 方法)。然后只需使用 df.format(calendar.getTime()) 之类的格式设置日期,其中 calendar 包含您所需的日期。
    【解决方案2】:

    不确定我是否理解您的问题,但是: 您是说要以 UTC 显示不同时区的时间? UTC 是一个时区,因此对于您的每个选择,UTC 时间将始终是相同的时间。您可能希望显示所选时区的本地时间,而不是 UTC。

    为此,请使用: System.currentTimeMillis() 它为您提供自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。

    您可以使用 DateFormat 设置您的时区并将其转换为本地时间。

    DateFormat df = DateFormat.getTimeInstance();
    //Here set the timezone according to the selection in your spinner 
    df.setTimeZone(TimeZone.getTimeZone("gmt")); 
    String gmtTime = df.format(new Date());
    

    希望这会有所帮助 干杯

    【讨论】:

      【解决方案3】:

      要创建吐司,请使用

      Toast.makeText(getApplicationContext(),gmtTime,Toast.LENGTH_SHORT)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-02
        • 1970-01-01
        • 2021-06-26
        • 2014-12-01
        • 2011-03-30
        • 2010-12-06
        • 2012-11-27
        • 1970-01-01
        相关资源
        最近更新 更多