【问题标题】:How to format a date in a particular format which has timezone in the output [duplicate]如何以输出中具有时区的特定格式格式化日期[重复]
【发布时间】:2017-05-22 19:26:08
【问题描述】:

我有一个这样的字符串格式的日期。它来自以下格式的其他来源,我无法更改:

2025-08-08T15%3A41%3A46

我现在必须将上面的字符串日期转换成这种格式:

Fri Aug 08 15:41:46 GMT-07:00 2025

所以下面是我尝试过的:

String decodedDate = URLDecoder.decode("2025-08-08T15%3A41%3A46", "UTF-8");
SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
Date date = dateParser.parse(decodedDate);
System.out.println(date);

这就是它在控制台上打印的内容。它打印出PDT 而不是GMT-07:00。我怎样才能得到它?

Fri Aug 08 15:41:46 PDT 2025

我也在使用 Java 7,我也可以使用 joda-time 库。这种转换方法可以被多个线程调用。

在所需的输出中,它打印出GMT-07:00,那么我怎样才能在我的代码中获得时区?

更新:-

这样做怎么样?

 SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
 TimeZone.setDefault(TimeZone.getTimeZone("GMT-07:00"));
 String decodedDate = URLDecoder.decode("2025-08-08T15%3A41%3A46", "UTF-8");
 Date date = dateParser.parse(decodedDate);
 System.out.println(date.toString());

【问题讨论】:

  • 我检查了那个问题,我试过了,但我仍然没有在输出中看到 GMT-07:00 字符串。
  • 所以你想让别人用勺子喂你确切的解决方案?是吗?副本只需要大约 2 秒的文档阅读时间就可以确定您需要修改哪些内容以使其完全符合您的要求。
  • 不,我不想要那个。我已经在链接中尝试了这些建议,但仍然没有得到我需要的输出,所以我不确定这些答案是否能回答我的问题。
  • 你提到了 JodaTime,虽然没有经验,但我确信 JodaTime 存在一个很好的解决方案。但是,JodaTime 的人建议您迁移到 JSR-310,那么为什么不从一开始就迈出这一步呢?

标签: java date simpledateformat


【解决方案1】:
SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
String decodedDate = URLDecoder.decode("2025-08-08T15%3A41%3A46", "UTF-8");
Date date = dateParser.parse(decodedDate);

//Decode the given date and convert to Date object

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd hh:mm:ss z-07:00 yyyy", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

System.out.println(sdf.format(date)); // set the timezone and print in the desired format

输出:

Fri Aug 08 07:41:46 GMT-07:00 2025

更新:正如KevinO 所建议的,更好的方法是

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("GMT-0700"));

【讨论】:

  • 是的,我已经尝试过了。我的输出应该是这样的:Fri Aug 08 15:41:46 GMT-07:00 2025 你的输出缺少一些东西。
  • @david,我已经更新了代码。如果有帮助,请告诉我。
  • 大部分看起来不错,但您的小时值不知何故从 15 更改为 07,为什么?
  • 你的输出应该不同
  • 如果您为输出设置了.getTimeZone("GMT-07:00"),那么您不需要将-07:00 硬编码为日期格式。总体而言,更好的方法是将“-0700”附加到decodedDate(尽管我怀疑夏令时的确切值等),然后让解析器使用“...:mm:ssZ”来获取时间。
猜你喜欢
  • 2021-05-30
  • 2014-12-15
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多