将日期时间解析为 UTC

Parsing datetime to UTC

我有这个日期 => 2017-10-17 10:23:30 UTC TIME

我是这样解析的

    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    TimeZone tz = TimeZone.getDefault(); // +03:00
    dateFormat.setTimeZone(tz);

    Date parsed_date = dateFormat.parse("2017-10-17 10:23:30");

但这给了我这个

Tue Oct 17 13:23:30 GMT+03:00 2017

我要这个

2017-10-17 01:23:30

有什么问题?

A Date 没有时区。因此,您的解析自 10 月 17 日星期二 13:23:30 GMT+03:00 2017 与 2017-10-17 10:23:30 UTC 的时间点相同。

仅当您尝试打印日期时才会添加时区。例如:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

Date parsed_date= dateFormat.parse("2017-10-17 10:23:30");
String strDate = dateFormat.format(parsed_date);
System.out.println(strDate);

打印:

2017-10-17 10:23:30

更新:要以另一种格式/时区显示日期,您可以使用如下内容:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

Date parsed_date= dateFormat.parse("2017-10-17 10:23:30");

SimpleDateFormat printFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
printFormat.setTimeZone(TimeZone.getTimeZone("GMT+3"));
String strDate = printFormat.format(parsed_date);
System.out.println(strDate);

这会打印:

2017-10-17 01:23:30

谢谢你们的帮助,这就是我想要的结果我发现,如果日期是 UTC,你应该从 utc 格式开始解析,这将把日期保持为你的本地时区格式本地时区

   private String getDate(String dateString) {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
            Date value = null;
            try {
                value = formatter.parse(dateString);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm aa");
            dateFormatter.setTimeZone(TimeZone.getDefault());
            String dt = dateFormatter.format(value);

            return dt;
        }