android日历时区不工作?

gur*_*gui 1 java android

我有一个Android应用程序的时区问题.

在下面的代码中是我的例子:

Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("America/Miami"));
    c2 = Calendar.getInstance(TimeZone.getDefault());
    c2.set(2012, Calendar.MAY, 1, 9, 0, 0);

    tv2.setText(c1.getTime().toString());
    tv3.setText(c2.getTime().toString());
Run Code Online (Sandbox Code Playgroud)

当我启动应用程序并查看textViews时,我发现: 在此输入图像描述

为什么他们都是gmt + 2而第一个不是迈阿密时区?

Pri*_*ebe 6

我可以复制您正在经历的内容.您可以通过执行以下操作在迈阿密时区获得正确的时间:

Calendar c1 = new GregorianCalendar(TimeZone.getTimeZone("GMT-4"));
int hour = c1.get(Calendar.HOUR);         
int minutes = c1.get(Calendar.MINUTE);     
int seconds = c1.get(Calendar.SECOND);

tv2.setText(String.format("%d:%d:%d", hour, minutes, seconds));
Run Code Online (Sandbox Code Playgroud)

输出:4:22:41

您可以使用"America/New_York"或"GMT-4".然而,最后一个提到Chilledrat可能会遇到一些夏令时问题.


Shu*_*ayu 5

好吧,经过大量试验后终于弄明白了.我观察到的问题是,Calendar的getTime()似乎总是返回当前TimeZone中的日期.我还没有发现任何数据表明它的工作方式.

要以您想要的方式获取数据,我们需要引入SimpleDataFormat.这就是我为获取数据所做的工作.

Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"), Locale.US);
Calendar c2 = Calendar.getInstance(TimeZone.getDefault());
c2.set(2012, Calendar.MAY, 1, 9, 0, 0);

SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setCalendar(c1);
tv2.setText(sdf.format(c1.getTime()));
tv3.setText(c2.getTime().toString());
Run Code Online (Sandbox Code Playgroud)

在这里,您可以根据定义的TimeZone获得输出.

注意我也使用了Locale,因为它应该是推荐的做法.告诉我这是否适合你.