Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SimpleDateFormat(“MM/dd/yy,HH:MM:ss zzz”)将时区表示为GMT+;05:30_Android_Kotlin_Simpledateformat - Fatal编程技术网

Android SimpleDateFormat(“MM/dd/yy,HH:MM:ss zzz”)将时区表示为GMT+;05:30

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

我想这样显示时间

2018年7月9日,美国标准时间23:15:00

我使用上面的时间格式,但是show时区的实例是这样的
IST
itshow
GMT+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上也不要考虑使用过时的、臭名昭著的<代码>简化。格式化
类并添加到您的项目中,以便您可以使用。这是一个非常好的处理方法。可能的副本永远不依赖三个字母的时区缩写。您将不知道您是获得爱尔兰夏季时间、以色列标准时间还是印度标准时间。相反,请使用欧洲/都柏林、亚洲/耶路撒冷或亚洲/加尔各答。