我一直在StackOverflow中深入研究这个问题 Android get Current UTC time 和 How can I get the current date and time in UTC or GMT in Java?
我尝试了两种方法来获取GMT手机的当前时间。我在西班牙,区别是GMT + 2。让我们看一个例子: 1º尝试:我创建了一个格式并将其应用于System.currentTimeMillis();
DateFormat dfgmt = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
dfgmt.setTimeZone(TimeZone.getTimeZone("GMT"));
String gmtTime = dfgmt.format(new Date());
//Using System.currentTimeMillis() is the same as new Date()
Date dPhoneTime = dfgmt.parse(gmtTime);
Long phoneTimeUTC = dPhoneTime.getTime();
我需要将那个时间减去另一个时间,这就是为什么我要把演员阵容变成Long。
DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date arrivalDate = df.parse(item.getArrivalDate());
//the String comes from JSON and is for example:"UTC_arrival":"2011-05-16 18:00:00"
//which already is in UTC format. So the DateFormat doesnt have the GMT paramater as dfgmt
diff = arrival.getTime() - phoneTimeUTC ;
我也试过这个:
Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Long phoneTimeUTC = aGMTCalendar.getTimeInMillis()
但我仍然没有得到正确的区别。但如果我这样做:
Long phoneTimeUTC = aGMTCalendar.getTimeInMillis()-3600000*2;
确实可行。
有什么想法吗?
非常感谢,
大卫。
答案 0 :(得分:21)
这肯定有效!
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(new Date())+"");
指定格式,您将在GMT中获得格式!
答案 1 :(得分:5)
据我读到calendar.getTimeInMillis();以毫秒为单位返回UTC时间。我使用以下代码并将其与此站点http://www.xav.com/time.cgi中的Epoch进行了比较。
public int GetUnixTime()
{
Calendar calendar = Calendar.getInstance();
long now = calendar.getTimeInMillis();
int utc = (int)(now / 1000);
return (utc);
}
Giora
答案 2 :(得分:4)
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Date currentLocalTime = cal.getTime();
DateFormat date = new SimpleDateFormat("dd-MM-yyy HH:mm:ss z");
date.setTimeZone(TimeZone.getTimeZone("GMT"));
String localTime = date.format(currentLocalTime);
System.out.println(localTime);
看一看是否有效。
答案 3 :(得分:4)
你可以随时使用:
Calendar mCalendar = Calendar.getInstance(TimeZone.getTimeZone("gmt"));
long millies = mCalendar.getTimeInMillis();
或
Calendar mCalendar = Calendar.getInstance(TimeZone.getTimeZone("utc"));
long millies = mCalendar.getTimeInMillis();
答案 4 :(得分:1)
输出:2016-08-01 14:37:48 UTC
final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
工作正常。
答案 5 :(得分:1)
我正在提供现代的答案。
要获取现在(在西班牙或其他任何地方)的电话时间与过去的某个时间之间的毫秒差:
// Example arrival time for the demonstration
Instant arrival = Instant.parse("2020-02-29T12:34:56.789Z");
Instant currentTime = Instant.now();
long difference = ChronoUnit.MILLIS.between(arrival, currentTime);
System.out.println("Difference is " + difference + " milliseconds");
示例输出:
差异为2610350731毫秒
如果要以秒为单位或以其他时间单位为单位,则只需使用ChronoUnit
枚举中的适当枚举常量,而不要使用ChronoUnit.MILLIS
。
无需担心设备时区,也无需担心格式或解析时间,这些担忧只会导致此基本简单问题的复杂化。
该时期是一个明确定义的时间点,它不会随时区变化,在世界各地都是一样的。因此,从纪元到现在的毫秒数在所有时区中都是相同的。有人说此计数始终以UTC表示,因为通常是在UTC中定义了纪元,例如1970年1月1日UTC时。
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。