Получение времени по Гринвичу с Android - PullRequest
14 голосов
/ 16 мая 2011

Я некоторое время копался в вопросе в StackOverflow Android получить Текущее время UTC а также Как узнать текущую дату и время в формате UTC или GMT на 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();

Мне нужно вычесть это время в другое время, поэтому я делаю приведение к Лонгу.

    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;

Работает нормально.

Есть идеи?

Большое спасибо,

Давид.

Ответы [ 5 ]

21 голосов
/ 17 апреля 2012

Это точно работает!

        SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
        dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
        System.out.println(dateFormatGmt.format(new Date())+"");

Укажите формат, и вы получите его в GMT!

5 голосов
/ 31 мая 2011

Насколько я читаю calendar.getTimeInMillis ();возвращает время UTC в миллисЯ использовал следующий код и сравнил его с эпохой на этом сайте http://www.xav.com/time.cgi.

public int GetUnixTime()
{
    Calendar calendar = Calendar.getInstance();
    long now = calendar.getTimeInMillis();
    int utc = (int)(now / 1000);
    return (utc);

}

Giora

4 голосов
/ 05 июля 2014

вы всегда можете использовать:

Calendar mCalendar = Calendar.getInstance(TimeZone.getTimeZone("gmt"));
long millies = mCalendar.getTimeInMillis();

или

Calendar mCalendar = Calendar.getInstance(TimeZone.getTimeZone("utc"));
long millies = mCalendar.getTimeInMillis();
4 голосов
/ 16 мая 2011
     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);

Посмотрите, работает ли это.

1 голос
/ 03 августа 2016

Выход: 2016-08-01 14:37:48 UTC

    final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

Работает нормально.

...