SimpleDateFormat(“ MM / dd / yy,HH:mm:ss zzz”)给出的时区为GMT + 05:30

时间:2018-09-07 12:34:02

标签: android kotlin simpledateformat

我想这样显示时间

  

09/07/18,23:15:00 IST

我使用上述时间格式,但是show timezone的实例像这样IST,它的show 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
}

任何人都可以帮助我解决这个问题。

3 个答案:

答案 0 :(得分:0)

您必须像这样设置所需的时区

outputFormat.timeZone =  TimeZone.getTimeZone("Asia/Calcutta") // this is a unique identifier of "IST" 

示例:https://try.kotlinlang.org/#/UserProjects/ulc8sg2dslsbgt4qsauqd1a1sv/akvvttd16f1sqjcg6rm7smuh6p

答案 1 :(得分:0)

根据文档,该文件应为:“ MM / dd / yy,HH:mm:ss zz”。这是两个“ z”而不是3。

this other question开始,您必须在TimeZone上设置SimpleDateFormat

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

SimpleDateFormat formats

答案 2 :(得分:0)

根据文档https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html,您必须使用'z'而不是'zzz,并且还尝试为日期格式设置时区,如下所示。

 inputFormat.timeZone = TimeZone.getTimeZone("IST")