如何以在输出中具有时区的特定格式格式化日期
How to format a date in a particular format which has timezone in the output
我有一个像这样的字符串格式的日期。它来自以下格式的其他来源,我无法更改:
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());
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"));
我有一个像这样的字符串格式的日期。它来自以下格式的其他来源,我无法更改:
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());
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"));