求助:将指定字符串转为GMT格式日期并获取当前GMT时间
解决日期转换与GMT时间获取需求
没问题,这就帮你搞定这两个需求,直接上可用的代码和逻辑说明:
1. 将指定字符串转为GMT时区的dd-MMM-yyyy HH:mm格式
首先要确保正确解析输入的字符串"19-Aug-2019 11:05",这里分两种常见场景:
场景一:输入字符串本身就是GMT时间
如果原字符串的时间是基于GMT的,解析时要指定时区,避免本地时区干扰:
// 定义匹配输入格式的DateFormat,并设置GMT时区 SimpleDateFormat inputFormatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm") inputFormatter.setTimeZone(TimeZone.getTimeZone("UTC")) // 解析字符串为Date对象 Date parsedDate = inputFormatter.parse("19-Aug-2019 11:05") // 定义输出格式,同样设置GMT时区 SimpleDateFormat outputFormatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm") outputFormatter.setTimeZone(TimeZone.getTimeZone("UTC")) // 格式化得到结果 String formattedGmtDate = outputFormatter.format(parsedDate) println "转换后的GMT时间: ${formattedGmtDate}"
场景二:输入字符串是本地时区时间
如果原字符串是你所在时区的时间,只需要去掉解析时的时区设置,解析后再转成GMT格式即可:
// 用本地时区解析输入字符串 SimpleDateFormat inputFormatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm") Date parsedDate = inputFormatter.parse("19-Aug-2019 11:05") // 转成GMT格式输出 SimpleDateFormat outputFormatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm") outputFormatter.setTimeZone(TimeZone.getTimeZone("UTC")) String formattedGmtDate = outputFormatter.format(parsedDate) println "转换后的GMT时间: ${formattedGmtDate}"
2. 获取当前GMT时间
这部分你的代码已经有基础了,完善后的版本如下:
// 获取当前时间 Date currentDate = new Date() // 定义GMT格式的DateFormat SimpleDateFormat gmtFormatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm") gmtFormatter.setTimeZone(TimeZone.getTimeZone("UTC")) // 格式化输出当前GMT时间 String currentGmtTime = gmtFormatter.format(currentDate) println "当前GMT时间: ${currentGmtTime}"
额外推荐:Java 8+ 更安全的处理方式
SimpleDateFormat是线程不安全的,如果你的项目使用Java 8及以上版本,更推荐使用DateTimeFormatter和ZonedDateTime:
// 字符串转GMT格式(输入为GMT时间) DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm").withZone(ZoneId.of("UTC")) ZonedDateTime parsedZdt = ZonedDateTime.parse("19-Aug-2019 11:05", formatter) String formattedDate = formatter.format(parsedZdt) println "Java8+转换后的GMT时间: ${formattedDate}" // 获取当前GMT时间 ZonedDateTime currentGmtZdt = ZonedDateTime.now(ZoneId.of("UTC")) String currentGmt = formatter.format(currentGmtZdt) println "Java8+当前GMT时间: ${currentGmt}"
内容的提问来源于stack exchange,提问作者lahimadhe
相关产品推荐
相关产品推荐

