我有一段时间需要解析当前的12小时时钟格式。一些例子如下:
11:30 PM
07:00 AM
这些时间目前在东部时区。将这些字符串转换为包含UTC等效字符串的字符串的最佳方法是什么?
答案 0 :(得分:0)
怎么样:
import java.text.SimpleDateFormat
val fmtFromLocal = new SimpleDateFormat("hh:mm a z") // z parses time zone
val fmtToGmt = new SimpleDateFormat("hh:mm a")
def toGmt(t: String): String = fmtToGmt.format(fmtFromLocal.parse(s + " EST"))
不幸的是,当本地时区不是GMT时,这会失败,因为.parse()返回本地时间。
修正:
import java.text.SimpleDateFormat
import java.util.{Date, TimeZone}
val localTz = TimeZone.getDefault()
val currentOffset = localTz.getOffset(System.currentTimeMillis)
val fmtFromLocal = new SimpleDateFormat("hh:mm a z") // z parses time zone
val fmtToGmt = new SimpleDateFormat("hh:mm a")
def toGmt(t: String): String = {
val time = fmtFromLocal.parse(t).getTime()
val timeUtc = time + currentOffset
fmtToGmt.format(new Date(timeUtc))
}
(未经测试)
答案 1 :(得分:0)
使用Joda-Time。
val tz = DateTimeZone.forTimeZone(TimeZone.getTimeZone("EST"))
// You can also use DateTimeZone.forID(), but it requires an id in form
// like 'Europe/Paris', but I don't remember which such ID corresponds to Eastern time
val fmt = DateTimeFormat.forPattern("hh:mm a")
val fmtIn = fmt.withZone(tz)
val fmtOut = fmt.withZone(DateTimeZone.UTC)
val strIn = "11:30 PM"
val strOut = fmtOut.print(fmtIn.parseDateTime(strIn))
简单明了。我收到04:40 AM
11:30 PM
,这似乎是正确的,而且我在UTC + 4区域,所以这个方法在本地时区独立工作。