Android SimpleDateFormat(“MM/dd/yy,HH:MM:ss zzz”)将时区表示为GMT+;05:30
我想这样显示时间 2018年7月9日,美国标准时间23:15:00 我使用上面的时间格式,但是show时区的实例是这样的Android SimpleDateFormat(“MM/dd/yy,HH:MM:ss zzz”)将时区表示为GMT+;05:30,android,kotlin,simpledateformat,Android,Kotlin,Simpledateformat,我想这样显示时间 2018年7月9日,美国标准时间23:15:00 我使用上面的时间格式,但是show时区的实例是这样的ISTitshowGMT+05:30。我使用以下代码解析日期:- fun parseDate(time: String?): String? { if (time != null) { val inputPattern = "yyyy-MM-dd'T'HH:mm:ss" val outputPattern = "MM/dd/yy, HH
IST
itshowGMT+05:30
。我使用以下代码解析日期:-
fun parseDate(time: String?): String? {
if (time != null) {
val inputPattern = "yyyy-MM-dd'T'HH:mm:ss"
val outputPattern = "MM/dd/yy, HH:mm:ss zzz"
val inputFormat = SimpleDateFormat(inputPattern, Locale.getDefault())
val outputFormat = SimpleDateFormat(outputPattern, Locale.getDefault())
var date: Date? = null
var str: String? = null
try {
date = inputFormat.parse(time)
str = outputFormat.format(date)
} catch (e: ParseException) {
e.printStackTrace()
}
return str
}
return time
}
谁能帮我解决这个问题 你必须像这样设置你想要的时区
outputFormat.timeZone = TimeZone.getTimeZone("Asia/Calcutta") // this is a unique identifier of "IST"
示例:根据文档,它应该是:“MM/dd/yy,HH:MM:ss zz”。这是两个“z”而不是3 从中,您必须在
SimpleDataFormat
上设置时区
z:太平洋标准时间
zz:PST
zzz:GMT-08:00
但正如OP所说,这三种方案的输出是相同的
例如:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class HelloWorld{
public static void main(String []args){
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy, HH:mm:ss zz");
Date date = new Date();
sdf.setTimeZone(TimeZone.getTimeZone("IST"));
String txtDate = sdf.format(date);
System.out.println(txtDate);
sdf = new SimpleDateFormat("MM/dd/yy, HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("IST"));
txtDate = sdf.format(date);
System.out.println(txtDate);
sdf = new SimpleDateFormat("MM/dd/yy, HH:mm:ss zzz");
sdf.setTimeZone(TimeZone.getTimeZone("IST"));
txtDate = sdf.format(date);
System.out.println(txtDate);
}
}
输出:
09/07/18, 18:26:08 IST
09/07/18, 18:26:08 IST
09/07/18, 18:26:08 IST
根据文档,您必须使用“z”而不是“zzz”,并尝试为日期格式设置时区,如下所示
inputFormat.timeZone = TimeZone.getTimeZone("IST")
对我来说,任何小于4 z的东西都会打印UTC打印09/07/18,12:51:53 UTC
从不使用三个字母的时区缩写。你不知道是爱尔兰夏季时间、以色列标准时间还是印度标准时间。取而代之的是使用欧洲/都柏林、亚洲/耶路撒冷或亚洲/加尔各答。我从未想到这些代码不是唯一的。感谢您指出。但据我所知,IST在java.util.timezone中默认为印度标准时间,并且在我的计算机上的特定别名应为“Asia/Calcutta”。getTimeZone(“IST”)
提供印度标准时间,ZoneDateTime.parse(“2018-09-10 12:00:00 IST”,DateTimeFormatter.of模式(“uuu-MM-dd-HH:MM:ss-z”))< /Cord>在java 8上解析亚洲/耶路撒冷,在java 10上解析成Atlantic /雷克雅未克。请避免混淆,并使用时区的区域/城市格式。为了您自己,为了那些在您旁边阅读和维护代码的人,即使在Android上也不要考虑使用过时的、臭名昭著的<代码>简化。格式化
类并添加到您的项目中,以便您可以使用。这是一个非常好的处理方法。可能的副本永远不依赖三个字母的时区缩写。您将不知道您是获得爱尔兰夏季时间、以色列标准时间还是印度标准时间。相反,请使用欧洲/都柏林、亚洲/耶路撒冷或亚洲/加尔各答。