将日期时间解析为 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;
}
我有这个日期 => 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;
}