• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Android format zapisu czasu

0 głosów
48 wizyt
pytanie zadane 8 stycznia w Android, Swift, Symbian przez xSebax Początkujący (290 p.)
edycja 8 stycznia przez xSebax
Witam, szukam jakiegoś typu/formatu danych do przechowywania czasu w aplikacji na androida. Interesują mnie dokładnie godziny i minuty. Godzina będzie zapisywana i pobierania z pliku, więc szukam jakiegoś formatu, który łatwo będzie zmienić ze Stringa. Ze względu na to że będę używał tej zmiennej do sortowania myślałem żeby po prostu trzymać je w long'u (bo w int się zapewne nie zmieści), ale nie mam pojęcia w jaki sposób później mam zamienić otrzymaną liczbę (i jak wygenerować takiego longa) na taki format żeby dało się go wyświetlić jako zwykła godzina. Godzinę będę pobierał z TimePickera.

1 odpowiedź

0 głosów
odpowiedź 9 stycznia przez JAKUBW Pasjonat (21,000 p.)

Najwydajniejszym formatem będzie timestamp czyli liczba sekund lub milisekund od 1 stycznia 1970 roku.

Jest on przechowywany w zmiennej typu long, więc operacje typu sortowanie są bardzo szybkie - w końcu to tylko liczba.

Jeśli chodzi o wady to po pierwsze - nie human redable, np. gdy piszę tą odpowiedź jest 1547025352. Nic nam to ludziom nie mówi. To ma znaczenie podczas debugowania. Po drugie - możesz mieć problem z strefami czasowymi, gdyż timestamp nie zawiera żadnych informacji o nich. 

Aby pobrać aktualny timestamp (w Android używa się wersji z milisekundami) piszesz:

long now = System.currentTimeInMillis();

jak chcesz dwa dni wcześniej:

long twoDaysAgo = System.currentTimeInMillis() - (24 * 60 * 60 * 1000) * 2

Jednak gdy chcesz wyświetlić musisz użyć parsera:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
String date = sdf.format(new Date(now))
// date jest teraz "2019-01-09 10:22:47"

Jak chcesz zmienić string w timestamp to odwrotnie:

long timestamp = sdf.parse("2019-01-13 23:54:12").getTime();

Warto spojrzeć do dokumentacji SimpleDateFormat, aby wiedzieć co te literki oznaczają

Ten format w stringu jest o tyle dobry, że też może służyć sortowaniu, jednak już mniej wydajnym. Aby móc sortować datami w stringu pamiętaj, że muszą mieć najpierw rok, potem miesiąc itd. nie odwrotnie tak jak zazwyczaj ludzie w Polsce piszą.

Fajną klasą jest też Calendar, bo ma kilka świetnych metod do ,,chodzenia po datach"

Calendar c = Calendar.getInstance(); //domyślnie jest teraz
c.set(year, month, day);
c.set(Calendar.HOUR_OF_DAY, 20);

int dayOfYear = c.get(Calendar.DAY_OF_YEAR);
c.add(Calendar.DAY_OF_YEAR, 15); //przesuwamy datę o 15 dni do przodu

long timestamp = c.getTimeInMillis();

Czego użyć w bazie danych Sqllite? String albo timestamp, osobiście wolę timestamp, bo mniej miejsca zajmuje i jest szybszy.

Podobne pytania

0 głosów
0 odpowiedzi 18 wizyt
pytanie zadane 6 dni temu w Android, Swift, Symbian przez Paweł123 Nałogowiec (28,100 p.)
0 głosów
2 odpowiedzi 91 wizyt
0 głosów
0 odpowiedzi 32 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

63,362 zapytań

109,629 odpowiedzi

229,035 komentarzy

44,308 pasjonatów

Przeglądających: 187
Pasjonatów: 6 Gości: 181

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...