通过Android获得GMT时间

时间:2011-05-16 08:43:11

标签: android date-format gmt

我一直在StackOverflow中深入研究这个问题 Android get Current UTC timeHow 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;

确实可行。

有什么想法吗?

非常感谢,

大卫。

6 个答案:

答案 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)

java.time和ThreeTenABP

我正在提供现代的答案。

要获取现在(在西班牙或其他任何地方)的电话时间与过去的某个时间之间的毫秒差:

    // 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 API级别26?

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在旧版Android上,请使用Android版的ThreeTen Backport。称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接