java - 来自“hh:mm aa”的 JAVA 日期转换未列出正确的时间
问题描述
我对以下测试代码看到的内容有些困惑:
public class TheDateIssue {
public static void main(String[] args) {
String TIME_FORMAT = "hh:mm aa";
try {
Date theDate = new SimpleDateFormat(TIME_FORMAT).parse("13:15 pm");
System.out.println("theDate: " + theDate);
} catch (ParseException e) {
System.out.println("Exception while converting string to Date. \n" + e.getLocalizedMessage());
}
}
要解析的时间是“13:15 pm”——但 sysout 输出列出了时间(在下面突出显示)。我期待太平洋标准时间 13:15:00或太平洋标准时间下午 1:15:00
theDate: Fri Jan 02 **01:15:00 PST** 1970
我究竟做错了什么?:(
解决方案
尝试这个:
LocalTime time = LocalTime.parse("13:15")
System.out.println(time.format(DateTimeFormatter.ofPattern("HH:mm a")));
或者:
ZonedDateTime time = ZonedDateTime.of(LocalDate.now(), LocalTime.parse("13:15"), ZoneId.of("America/Los_Angeles"));
System.out.println(time.format(DateTimeFormatter.ofPattern("HH:mm:ss zz")));
如果由于某种原因您被日期类卡住了,请以某种方式对其进行转换:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ssZ aa");
Date theDate = simpleDateFormat.parse("13:15:00 PST PM");
ZonedDateTime date = ZonedDateTime.ofInstant(theDate.toInstant(), ZoneId.of("America/Los_Angeles"));
System.out.println(date.format(DateTimeFormatter.ofPattern("HH:mm:ss zz")));
但你是对的,这是奇怪的行为。他们创建 LocalDate 等是有充分理由的,远离 Date 类。
推荐阅读
- c++ - 返回元组的可变参数模板
- java - 如何在 Spring MVC 中使用带有属性名称的 Spring @RequestMapping 注解
- python - 网络抓取问题(William Hill-UFC 赔率)
- android - onDraw 在自定义视图中的 onMeasure 之前被调用
- javascript - 未捕获的 ReferenceError:值未在 HTMLAnchorElement.onclick 中定义
- compilation - Erlang编译期间的eval表达式
- abap - 如何使用空白值而不是 0.00 制作货币金额字段
- google-ads-api - 由于 Adwords 广告系列导致的 iOS 应用安装量未通过 Firebase 归因
- docker - TeamCity Build Agent:通过 URL 在服务器上注册时出错
- linux - 需要屏蔽jenkins中的敏感信息