• 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 Nowicjusz (240 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 (20,980 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 21 wizyt
0 głosów
0 odpowiedzi 18 wizyt
0 głosów
1 odpowiedź 72 wizyt
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

61,302 zapytań

107,230 odpowiedzi

223,305 komentarzy

32,789 pasjonatów

Przeglądających: 295
Pasjonatów: 16 Gości: 279

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.

...