如何使SimpleDateFormat输出含冒号的时区日期格式?
解决时区格式带冒号的日期格式化问题
方案一:使用SimpleDateFormat的XXX模式(Java 7+)
SimpleDateFormat的Z模式输出不带冒号的时区偏移(如+0200),而Java 7及以上版本支持XXX模式,可输出带冒号的偏移格式(如+02:00)。只需将原模式字符串修改为yyyy-MM-dd'T'HH:mm:ssXXX即可。
修改后的代码示例:
public class testDate { public static final DateFormat PATTERN = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); public static String calendarToString(final Calendar dateToConvert, final DateFormat df) { return df.format(dateToConvert.getTime()); } public static void main(String[] args) { Calendar effectiveDate = Calendar.getInstance(); System.out.println(calendarToString(effectiveDate, PATTERN)); } }
方案二:使用Java 8+推荐的java.time API(更优)
Date和Calendar类已被Java 8引入的java.time包取代,该包API更简洁、线程安全且功能完善。可以使用ZonedDateTime结合DateTimeFormatter实现需求,甚至直接用预定义的ISO_OFFSET_DATE_TIME格式(完全匹配你需要的输出样式)。
代码示例:
import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; public class testDate { public static final DateTimeFormatter PATTERN = DateTimeFormatter.ISO_OFFSET_DATE_TIME; // 也可自定义模式:DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX") public static String zonedDateTimeToString(final ZonedDateTime dateToConvert, final DateTimeFormatter formatter) { return dateToConvert.format(formatter); } public static void main(String[] args) { ZonedDateTime effectiveDate = ZonedDateTime.now(); System.out.println(zonedDateTimeToString(effectiveDate, PATTERN)); } }
内容的提问来源于stack exchange,提问作者monotor
相关产品推荐
相关产品推荐

