Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
ящюр
97 / 97 / 24
Регистрация: 15.03.2013
Сообщений: 519
Записей в блоге: 1
#1

Время. Перевод согласно часовым поясам - Программирование Android

31.01.2014, 22:48. Просмотров 711. Ответов 0
Метки нет (Все метки)

есть filetime 130358883000000000 , перевожу в нормальный вид
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
long pwdLastSet = Long.parseLong("130358883000000000");
    Log.i(TAG,"long value : "+pwdLastSet);
    long javaTime = pwdLastSet - 0x19db1ded53e8000L;
    javaTime /= 10000L;
  
    Date today = new Date(javaTime);
    SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    
    String newDateString = sdf2.format(today);
    
    Log.i(TAG,"Date 1changed format :"+newDateString);

Судя по конвертерам в инете это время в часовом поясе -5:00. Мне его нужно перевести во временной пояс устройства. Как это сделать?

Добавлено через 6 часов 7 минут Решено. Тему можно закрыть.
FILETIME это 64-х разрядное значение, обозначающее количество интервалов по 100 наносекунд каждый, прошедших с первого января 1601 года. Это грубо говоря цитата с майкрософта.
Класс Data в андроиде формируется в милисекундах начиная с 1 января 1970 года. Поэтому проводим некоторые операции преобразования.Получаем нечто подобное. Для примера оставил пример со сменой часового пояса.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
long pwdLastSet = Long.parseLong("130358883000000000");
        // это 64-х разрядное значение, обозначающее количество интервалов 
        // по 100 наносекунд каждый, прошедших с первого января 1601 года. ( FILETIME Майкрософт )
    
    long javaTime = pwdLastSet - 0x19db1ded53e8000L;     // Отнимаем 116444736000000000 (369 лет)
    javaTime /= 10000L;      // Переводим в секунды
  
    Date today = new Date(javaTime); // Здесь уже имеем преобразованное время отсчет корого идет 
                                     // в милисекундах с 1 января 1970 года
    SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    
    String newDateString = sdf2.format(today); // Здесь имеем дату вида 02/03/2014 12:05:00 
                                               //(формат указан строкой выше)
    Log.i(TAG,"Date changed format :"+newDateString); // Контрольный вывод даты
    TimeZone tz = sdf2.getTimeZone();   // Получаем текущее значение временной зоны 
    
    Log.i(TAG,"rawset="+tz.getRawOffset()); // Получаем  смещение в милисекундах  (rawset=14400000)
 
    Log.i(TAG,"rawset(H)="+ (tz.getRawOffset()/(1000*60*60)));  // Оно же в часах  ( 4 )
    
    tz.setRawOffset(-(tz.getRawOffset())); // Меняем значение на нужное (в данном примере инвертируем смещение )
                                           // Было GMT04:00  стало GMT-04:00 
    sdf2.setTimeZone(tz);   // И устанавливаем его
    Log.i(TAG,"after change rawset="+tz.getRawOffset());    // Проверяем - смещение в милисекундах  
                                                            // (after change rawset=-14400000)
 
    Log.i(TAG,"after change rawset(H)="+ (tz.getRawOffset()/(1000*60*60))); // after change rawset(H)=-4
 
    newDateString = sdf2.format(today); // Проверяем
 
    Log.i(TAG,"after change Date changed format :"+newDateString);
    //  after change Date changed format :02/03/2014 04:05:00
    // Как видим время сместилось на 8 часов
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2014, 22:48     Время. Перевод согласно часовым поясам
Посмотрите здесь:
Подсчитать отработанное время согласно логу VBA
перевод целого числа в строку согласно формату C++ Builder
Перемещение, согласно времени (скорость время расстояние) C#
Перевод букв заданных слов из одного регистра в другой согласно условию C++
Вывод имён только тех пользователей, у которых согласно учетной записи истекает время использования пароля
Перевод из UnixTime в обычное время Delphi
Перевод с Паскаля на Си. Определить время суток C++
Lisp Как во время cons сделать перевод строки?
C++ Перевод времени - секунды с 1970 в наше время
Как в Java с точки зрения эффективности время процессора, памяти и простоты реализовать перевод Java
Закарпатский областной подал запрос Раде по поводу того, чтобы возобновить перевод часов на зимнее время
Delphi Перевод "строка -> время"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru