这个问题在这里已有答案:
我有一个文本视图,应该在其上显示日期时间。
2018-04-25T12:40:15 IST
我尝试在android studio中进行简单的单元测试,它打印出我想要的确切结果
我的测试班
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
Date now = Calendar.getInstance().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss z");
sdf.setTimeZone(TimeZone.getDefault());
System.out.println(sdf.format(now) );
}
}
产量
2018-04-25T12:40:15 IST
但是当我在Activity中的TextView上显示它时,它显示的内容如下所示
2018-04-25T12:31:29 GMT+05:30
我不知道我犯了什么错误,任何人都可以帮助我实现目标。还要注意IST对于所有结果都不是静态的,它应该是动态的,取决于用户的时间zome。
我会去Anuraag的答案,并显示完整的时区名称。
像IST和EST这样的缩写并不理想,因为它们是非标准化的,甚至不是唯一的,请参阅此答案以获得更详细的解释:https://stackoverflow.com/a/18407231
示例:印度,以色列和爱尔兰使用IST,您无法知道它是哪一个。 EST由美国和澳大利亚使用,依此类推。
当然,对于大多数情况,用户会知道它指的是他们所在的位置 - 使用配置了印度时区的设备的印度用户将显示IST并且用户将知道它是正确的。但是如果同一个用户前往爱尔兰或以色列并且不更改设备的设置怎么办?我想它可能会显示“IST”,但是使用该国家的当地时间,这可能会令人困惑。我更愿意显示完整的时区ID并消除歧义。
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
Date now = Calendar.getInstance().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("IST"));
System.out.println(sdf.format(now) );
}
}
尝试上面的代码可能会对你有所帮助
来自Android TimeZone Documentation:
为了与JDK 1.1.x兼容,还支持其他一些三字母时区ID(例如“PST”,“CTT”,“AST”)。但是,它们的使用已被弃用,因为相同的缩写通常用于多个时区(例如,“CST”可能是美国“中央标准时间”和“中国标准时间”),然后Java平台只能识别其中一个他们。
IST不属于支持的三个字母时区。您可以使用TimeZone.getAvailableIDs()
获取支持的ID的完整列表
作为解决方法,您可以以下列形式显示TimeZone:美国/阿拉斯加州,美国/阿留申群岛,亚洲/加尔各答,亚洲/伊斯坦布尔等
为了这:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", current);
TimeZone timeZone = TimeZone.getDefault();
sdf.setTimeZone(timeZone);
String date = sdf.format(now) + " " + timeZone.getID();
其中String date
的价值就像
2018-04-25T14:12:57亚洲/加尔各答
不确定这是否会对你有所帮助。