2013-05-16 2 views
2

Я получаю местоположение с помощью диспетчера местоположения в зависимости от настройки, 2 минуты в тестовом примере и пытается использовать метод location.geTime(). Я не использую LocationManager.getLastKnownLocation(). Документ говорит, что это UTC время и я преобразовал его к местному времени, как показано ниже:Местоположение Android getTime() всегда возвращает большое разное время

Date d = new Date(location.getTime()); 
SimpleDateFormat sdf = new SimpleDateFormat("yyMMddkkmmss'; 
sdf.setTimeZone(TimeZone.getTimneZone("UTC"); 
sdf.format(d); 

Но я получаю другую дату от того, что я ожидал. Текущее время, которое я пишу, составляет около 130516155000 (2013-05-16 15:50:00), но я получаю 040015130515. И я удалил часовой пояс и установил часовой пояс как «GMT», а дату зафиксировали, но время было довольно другой. В реальном устройстве и эмуляторе такие же. И я уже проверил настройку часового пояса в обоих, и они верны. Пожалуйста, скажите мне, что мне не хватает?

Спасибо.

EDIT:

Я добавляю больше.

Log: 
05-16 16:09:30.227: D/location.getTime()(1279): 1368590417000 
05-16 16:09:30.237: D/NMEAGPRMCTime(1279): 040017 
05-16 16:09:30.247: D/NMEAGPRMCDate(1279): 130515 

Код:

public static String NMEAGPRMCTime(Date d) 
{ 
    SimpleDateFormat sdf = new SimpleDateFormat("kkmmss"); 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    String result = sdf.format(d); 
    Log.d("NMEAGPRMCTime", result); 
    return result; 
} 


public static String NMEAGPRMCDate(Date d) 
{ 
    SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    String result = sdf.format(d); 
    Log.d("NMEAGPRMCDate", result); 

    return result; 
} 

Вот так. Это код, который я использую.

+0

Кажется, очень * маловероятно, что вы получите этот вывод из этого формата - это предполагает, что месяц равен 0! Затем снова код, который вы опубликовали, недействителен, так что, возможно, вы фактически не используете формат, который, как вы утверждаете. Пожалуйста, введите * действительный * код, который соответствует реальному коду, который вы используете. –

+0

Кроме того, что произойдет, если вы зарегистрируете 'location.getTime(). ToString()'? Это будет отображаться в часовом поясе системы по умолчанию, но, по крайней мере, это разделит проблему «что такое значение» от форматирования. –

+1

@ Jon Спасибо. Я добавил еще и location.getTime() не является объектом, а примитивным типом, поэтому вы не можете использовать toString(). – sunghun

ответ

6

В данном форматировании нету ничего плохого.

Посмотрите на журнал:

05-16 16:09:30.227: D/location.getTime()(1279): 1368590417000 
05-16 16:09:30.237: D/NMEAGPRMCTime(1279): 040017 
05-16 16:09:30.247: D/NMEAGPRMCDate(1279): 130515 

epochconverter Использование вы можете увидеть, что «Миллисекунды эпохи» значение 1368590417000 фактически Ср, 15 мая 2013 4:00:17 UTC. Таким образом, время 040017 и дата 130515 точно верны.

Я подозреваю, что вы действительно смущены тем, что делает Location.getTime() - он возвращает время исправления, а не текущее время. Таким образом, в основном это место было получено в 04:00:17 UTC, независимо от текущей даты/времени.

+0

Спасибо за ваш вопрос. Я изучаю, о чем вы говорите. Теперь я знаю, что проблема исходит из причины. Мое исправление местоположения имеет тайм-аут, и этого недостаточно для провайдера GPS, около 30 секунд, и это дало старое время исправления. Благодаря вам, и я могу найти, чтобы исправить еще одну ошибку. – sunghun

+0

@ Jon я могу знать, что вы подразумеваете под «временем исправить»? Я не понимаю смысла этого. –

+0

@iDroidExplorer: время, в которое определитель местоположения определил местоположение. –

Смежные вопросы