Получение времени по Гринвичу с Android
Я некоторое время копался в вопросе в StackOverflow
Android получит текущее время UTC
а также
Как получить текущую дату и время в UTC или GMT на Java?
Я пробовал два способа получить текущее время моего телефона в GMT. Я в Испании, а разница - GMT + 2. Поэтому давайте посмотрим с примером:
1º attemp: я создал формат и применил его к 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;
Он работает нормально.
Любые идеи?
Большое спасибо,
Дэвид.
Ответы
Ответ 1
Насколько я читаю calendar.getTimeInMillis(); возвращает время UTC в миллисекундах. Я использовал следующий код и сравнил его с Epoch на этом сайте http://www.xav.com/time.cgi.
public int GetUnixTime()
{
Calendar calendar = Calendar.getInstance();
long now = calendar.getTimeInMillis();
int utc = (int)(now / 1000);
return (utc);
}
Гиора
Ответ 2
Это работает точно!
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(new Date())+"");
Укажите формат, и вы получите его в GMT!
Ответ 3
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);
Посмотрите и посмотрите, работает ли это.
Ответ 4
вы всегда можете использовать:
Calendar mCalendar = Calendar.getInstance(TimeZone.getTimeZone("gmt"));
long millies = mCalendar.getTimeInMillis();
или
Calendar mCalendar = Calendar.getInstance(TimeZone.getTimeZone("utc"));
long millies = mCalendar.getTimeInMillis();
Ответ 5
Выход: 2016-08-01 14:37:48 UTC
final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Прекрасно работает.