我如何获得设备的本地时间并将其转换为我所在国家/地区的全局UTC格式?
根本没有获得 local 时间 - 只需获得UTC值,例如,例如。
long millis = System.currentTimeMillis();
或:
Date date = new Date();
如果您需要将其格式化为字符串,请使用SimpleDateFormat
,但请记住适当设置时区。例如:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
Locale.US);
format.setTimeZone(TimeZone.getTimeZone("Etc/Utc"));
String text = format.format(new Date());
(目前尚不清楚您所说的"我国家的全局UTC格式" -UTC简单是全局,而不是格式,它是时区。)
现有答案是正确的,他们在2012年11月提供了正确的方向(当提出问题时)。2014年3月,现代日期API作为 Java 8标准库的一部分发布,它取代了容易出错的java.util
Date Time API及其相应的解析/格式化类型SimpleDateFormat
,并且自从然后强烈建议切换到java.time
,即现代日期API。
使用java.time
:
解决方案您可以简单地使用Instant#now
将当前矩独立于时区(即在UTC)。请注意,java.time
API基于ISO 8601标准。
如果您需要特定时区的当前日期时间,则可以使用ZonedDateTime#now(ZoneId)
,也可以以所需格式格式化。
演示:
class Main {
public static void main(String[] args) {
// Current moment
System.out.println(Instant.now());
// Current date-time in a specific timezone e.g. America/New_York
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("America/New_York"));
System.out.println(zdt);
// Output in a custom format e.g. EEE MMM dd, uuuu 'at' hh:mm:ss a
String formattedStr = zdt.format(DateTimeFormatter.ofPattern("EEE MMM dd, uuuu 'at' hh:mm:ss a", Locale.ENGLISH));
System.out.println(formattedStr);
}
}
在线演示
注意:永远不要使用DateTimeFormatter
进行自定义格式,而无需Locale
的SimpleDateFormat
。
从 trail:日期时间。
不确定您想做什么,但是如果您想要以正常格式的日期和时间,可以这样做:
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
Calendar cal = Calendar.getInstance();
String dateAndTime = dateFormat.format(cal.getTime());
String DateAndTime将像2012/01/01 11:13
一样,根据日期&设备设置的时间,因此与设备的时钟相同的时间。您可以通过将"yyyy/MM/dd HH:mm"
更改为您喜欢的任何东西来稍微播放格式。
希望这会有所帮助!
更新:要使UTC时间这样做:
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateAndTimeUTC = dateFormat.format(new Date());