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

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

Войти
Регистрация
Восстановить пароль
 
Strelok45
11 / 11 / 0
Регистрация: 18.02.2010
Сообщений: 149
#1

Сохранение текущего времени - Android

02.09.2014, 18:12. Просмотров 796. Ответов 7
Метки нет (Все метки)

Доброго времени суток.
Разбираюсь с временем в андроиде. Идея получить время, когда приложение запускается первый раз, при закрытии приложения сохранить время в настройки, а при открытии запросить время, вычислить сколько прошло в днях с первого момента запуска приложения. Накидал код:
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
34
35
36
37
final String LOG_TAG = "myLogs";
Date startDate=new Date();
public static final String APP_PREFERENCES = "mysettings";
SharedPreferences sPref;
public static final String SAVED_START_TIME = "saved_start_time";
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
        startDate.getTime(); // запрос времени первого запуска
    showTime();
        sPref = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
}
@Override
protected void onPause() {
    super.onPause();
    Log.d(LOG_TAG, "onPause" );
    // Сохранение
    Editor editor = sPref.edit();
        editor.putLong(SAVED_START_TIME, startDate);
        editor.apply();
}
@Override
protected void onResume() {
    super.onResume();
    Log.d(LOG_TAG, "onResume" );
 
        if (sPref.contains(SAVED_START_TIME)) 
            startDate = sPref.getLong(SAVED_START_TIME, 0);
        showTime();
}
private void showTime(){
        int days=(int)(startDate.getTime()-(new Date()).getTime())/86400;
    Log.d(LOG_TAG, "переменная days = " + days);
}
затрудняюсь в сохранении, на Long ругается.. я понимаю, что startDate - Date, но getTime() как я понял Long же запрашивает. Как привести типы, чтоб работало?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
02.09.2014, 19:07     Сохранение текущего времени #2
Ну конечно дата в Long хранится, от Long и плясать.
Strelok45
11 / 11 / 0
Регистрация: 18.02.2010
Сообщений: 149
02.09.2014, 19:16  [ТС]     Сохранение текущего времени #3
Вот я и затрудняюсь в этом вопросе. Получается мне надо как то data к long привести.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
02.09.2014, 19:53     Сохранение текущего времени #4
Ну вот так:
Java
1
long date = System.currentTimeMillis();
А вообще конкретней что хотите? С датами примеров в инете много.
Сохранили long в Preferences. При загрузке считали long, отняли текущий long, преобразовали в дни, часы и т.д.
Strelok45
11 / 11 / 0
Регистрация: 18.02.2010
Сообщений: 149
03.09.2014, 04:33  [ТС]     Сохранение текущего времени #5
Цитата Сообщение от Rube Посмотреть сообщение
А вообще конкретней что хотите? С датами примеров в инете много.
Сохранили long в Preferences. При загрузке считали long, отняли текущий long, преобразовали в дни, часы и т.д.
хочу реализовать такую идею: при первом запуске приложение запрашивает дату и время, и при запуске данного приложения в любое время оно выдает сколько дней прошло с первого запуска. Уже кучу примеров пересмотре: выводит данные некорректно. И с System.currentTimeMillis() пробовал и с Data, с Calendar.. может я сам что то упустил.
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
34
35
36
37
final String LOG_TAG = "myLogs";
long start_time; //время запуска приложения
public static final String APP_PREFERENCES = "mysettings";
SharedPreferences sPref;
public static final String SAVED_START_TIME = "saved_start_time";
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
    start_time = System.currentTimeMillis(); // запрос даты начального времени
    showTime();
    sPref = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
}
@Override
protected void onPause() {
    super.onPause();
    Log.d(LOG_TAG, "onPause" );
    // Сохранение
    Editor editor = sPref.edit();
        editor.putLong(SAVED_START_TIME, start_time);
        editor.apply();
}
@Override
protected void onResume() {
    super.onResume();
    Log.d(LOG_TAG, "onResume" );
 
        if (sPref.contains(SAVED_START_TIME)) 
            start_time = sPref.getLong(SAVED_START_TIME, 0);
        showTime();
}
private void showTime(){
        int days=(int)(start_time- System.currentTimeMillis()).getTime())/86400;
    Log.d(LOG_TAG, "переменная days = " + days);
}
Все бы ничего, но иногда days выдает результат -1 буквально после нескольких сворачиваний приложения за пару минут.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
03.09.2014, 08:34     Сохранение текущего времени #6
Java
1
2
3
4
5
6
7
8
long date_start = new GregorianCalendar(2014, 8, 1).getTimeInMillis();
    System.out.println("Первый запуск: " + date_start);
long date_today = new GregorianCalendar().getTimeInMillis();    
    System.out.println("Сегодня: " + date_today);
long difference =(date_today - date_start); 
    System.out.println("Разница: " + difference );      
int days =  (int)difference / (24 * 60 * 60 * 1000);
    System.out.println("Прошло дней: " + days);
Добавлено через 9 минут
35 строка у Вас работает? Мне кажется там скобок непарное число.
start_time это время запуска приложения, а где время самого первого запуска?
Strelok45
11 / 11 / 0
Регистрация: 18.02.2010
Сообщений: 149
03.09.2014, 09:05  [ТС]     Сохранение текущего времени #7
Цитата Сообщение от Rube Посмотреть сообщение
35 строка у Вас работает? Мне кажется там скобок непарное число.
нашел ошибку, я из стартового времени отнимал настоящее время в итоге отрицательное значение дней получал. А дни считались быстро, так как в коде, считывается значение в миллисекундах, а я делил на кол-во секунд в дне, чтобы дни получить =) И получал смену дня за полторы минуты =)
Java
1
int days=(int)(System.currentTimeMillis()-start_time)/(86400*1000);
Добавлено через 1 минуту
Цитата Сообщение от Rube Посмотреть сообщение
GregorianCalendar(2014, 8, 1)
в скобках, как я понял формат даты? год, месяц, день?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2014, 09:42     Сохранение текущего времени
Еще ссылки по теме:

Вызов другого приложения из текущего Android
Сохранение ImageView Android
Android Сохранение данных
Сохранение в SharedPreferences Android
Профиль текущего пользователя Android

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

Или воспользуйтесь поиском по форуму:
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
03.09.2014, 09:42     Сохранение текущего времени #8
Цитата Сообщение от Strelok45 Посмотреть сообщение
год, месяц, день?
Да, только месяц в GregorianCalendar считается с 0, сл-но "2014, 8, 1" это 01.09.2014
Yandex
Объявления
03.09.2014, 09:42     Сохранение текущего времени
Ответ Создать тему
Опции темы

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