+1 To było bardzo pomocne. Będąc nowym, to te wszystkie małe ciekawostki, których potrzebujemy ... Korzystam z Kalendarza, aby uzyskać datę Juliana. Znacznie łatwiejsze niż uzyskanie milisekund i ustalenie, czy wartość jest dziś równa;)
Bill Mote
9
Ale skąd ta data i godzina? ustawienie samego urządzenia z Androidem?
Kyle Clegg
12
@Kyle Tak, jest to oparte na ustawieniach czasu urządzenia / strefie czasowej. Cytat z dokumentu : „Metoda getInstance kalendarza zwraca kalendarz, którego ustawienia regionalne są oparte na ustawieniach systemu i których pola czasu zostały zainicjowane bieżącą datą i godziną” - (nad pierwszą linią kodu samplecode w dokumentacji klasy).
3
+1 to rozwiązanie ma milisekundową precyzję, dokładnie to, czego potrzebowałem.
Igor Zelaya,
42
Jak mówi @adamdport, to tak naprawdę nie odpowiada na pytanie ... Calendar.getInstance().getTime()lub Calendar.getInstance().getTimeInMillis()zadziała.
Klasa Time jest szybszym zamiennikiem klas java.util.Calendar i java.util.GregorianCalendar. Instancja klasy Time reprezentuje moment w czasie, określony z drugą precyzją.
UWAGA 1:
Minęło kilka lat, odkąd napisałem tę odpowiedź, i dotyczy starej, specyficznej dla Androida, a teraz przestarzałej klasy. Google mówi teraz , że „[jego] klasa ma wiele problemów i zaleca się, aby zamiast tego używać GregorianCalendar ”.
UWAGA 2: Mimo że Timeklasa ma toMillis(ignoreDaylightSavings)metodę, jest to jedynie wygoda przejścia do metod, które oczekują czasu w milisekundach. Wartość czasu jest precyzyjna tylko do jednej sekundy ; część milisekund jest zawsze 000. Jeśli robisz to w pętli
Time time =newTime(); time.setToNow();Log.d("TIME TEST",Long.toString(time.toMillis(false)));...do something that takes more than one millisecond, but less than one second ...
Wynikowa sekwencja będzie powtarzać tę samą wartość, np. Do 1410543204000momentu rozpoczęcia następnej sekundy, kiedy 1410543205000to zacznie się powtarzać.
@InsanityOnABun i Muhammad Babar. Nie nie nie. Dokumenty mówią „określone z drugą precyzją”. Nawet najprostszy test (uzyskanie bieżącego czasu w pętli, toMillis i rejestrowanie / wydrukowanie wyniku) pokazałby, że wynikowy czas ma 000 jako część milisekundową!
ToolmakerSteve
3
@IgorZelaya Jeśli chcesz dokładność w milisekundach, prawdopodobnie wykonujesz pomiary interwałów , a nie pory dnia. Dokumenty Androida zalecają SystemClock.uptimeMillis()odmierzanie czasu. Ponieważ tego właśnie używa większość wbudowanych funkcji, istnieje silna motywacja, aby była dobrze zaimplementowana na wszystkich urządzeniach. Zobacz dyskusję w SystemClock ... Jeśli chcesz skorelować to z porą dnia, w aplikacji onResume aplikacji przeczytaj zarówno to, jak i Time / setToNow / toMillis. Pamiętaj różnicę między nimi.
ToolmakerSteve
Nie używaj klasy Time . Zostanie on usunięty w przyszłości i ma wiele problemów z tym.
Sandy Chapman
1
> Ta klasa została uznana za przestarzałą na poziomie API 22. Zamiast tego należy użyć GregorianCalendar. Zobacz tutaj
Neo
W rzeczywistości GregorianCalendarzostał zastąpiony wiele lat temu w Javie, a później w systemie Android , w szczególności przez klasy java.timeZonedDateTime . W przypadku wcześniejszego Androida zobacz projekty ThreeTen-Backport i ThreeTenABP .
Basil Bourque,
365
Jeśli chcesz ustawić datę i godzinę według określonego wzoru, możesz użyć następujących opcji:
To da czas w UTC, powinien dostosować się do stref czasowych.
Andras Balázs Lajtha
10
Uwaga, SimpleDateFormat może powodować problemy, jeśli problem stanowi wydajność. W mojej aplikacji miałem niestandardowy widok, który miał około 20 etykiet GG: MM, które reprezentowały określone czasy (długie liczby całkowite trzymały milisekundy), i taką samą liczbę zasobów do pobrania. Wstępne testy wykazały, że interakcja nie była tak płynna, jak chciałem. Kiedy profilowałem onDraw (), stwierdziłem, że wywołania SimpleTimeFormatter zajmują 80% czasu. W rzeczywistości czytam tę stronę w ramach poszukiwania wydajniejszego formatyzatora i aby dowiedzieć się więcej na temat kalendarzy itp.
William T. Mallard
3
Tak, ale już nie. Nie zdawałem sobie sprawy z kosztów ogólnych i założyłem, że to w zasadzie POJO.
William T. Mallard
32
W skrócie:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Pratik Butani
4
można wstawić sdf.setTimeZone(TimeZone.getDefault())w środku
Harvey
231
Dla tych, którzy wolą niestandardowy format, możesz użyć:
DateFormat df =newSimpleDateFormat("EEE, d MMM yyyy, HH:mm");String date = df.format(Calendar.getInstance().getTime());
Podczas gdy możesz mieć wzorce DateFormat, takie jak:
"yyyy.MM.dd G 'at' HH:mm:ss z"----2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz"-----------12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
W rzeczywistości bezpieczniej jest ustawić bieżącą strefę czasową ustawioną na urządzeniu Time.getCurrentTimezone(), w przeciwnym razie otrzymasz aktualny czas w UTC.
Time today =newTime(Time.getCurrentTimezone());
today.setToNow();
Następnie możesz uzyskać wszystkie wymagane pola daty, na przykład:
textViewDay.setText(today.monthDay +"");// Day of the month (1-31)
textViewMonth.setText(today.month +"");// Month (0-11)
textViewYear.setText(today.year +"");// Year
textViewTime.setText(today.format("%k:%M:%S"));// Current time
Jak wskazuje wiele osób, Google twierdzi, że ta klasa ma wiele problemów i nie powinna być już używana:
Ta klasa ma wiele problemów i zaleca się stosowanie zamiast niej GregorianCalendar.
Znane problemy:
Z powodów historycznych podczas wykonywania obliczeń czasowych cała arytmetyka odbywa się obecnie przy użyciu 32-bitowych liczb całkowitych. Ogranicza to wiarygodny przedział czasowy reprezentowany od 1902 r. Do 2037 r. Szczegółowe informacje można znaleźć w artykule w Wikipedii na temat problemu z 2038 r. Nie polegaj na tym zachowaniu; może się to zmienić w przyszłości. Wywołanie switchTimezone (String) w dniu, który nie może istnieć, takim jak czas ściany, który został pominięty z powodu przejścia DST, spowoduje datę w 1969 r. (Tj. -1 lub 1 sekundę przed 1 stycznia 1970 UTC). Duża część formatowania / parsowania zakłada tekst ASCII i dlatego nie nadaje się do użycia ze skryptami innymi niż ASCII.
Instant instant =Instant.now();// Current moment in UTC.
Strefa czasowa
Zastosuj strefę czasową ( ZoneId), aby uzyskać ZonedDateTime. Jeśli pominiesz strefę czasową, domyślnie zastosowana zostanie domyślna strefa czasowa JVM. Lepiej wyraźnie określić żądaną / oczekiwaną strefę czasową.
ZoneId zoneId =ZoneId.of("America/Montreal");// Or "Asia/Kolkata", "Europe/Paris", and so on.ZonedDateTime zdt =ZonedDateTime.ofInstant( instant , zoneId );
Generowanie ciągów
Możesz łatwo wygenerować Stringjako tekstową reprezentację wartości daty i godziny. Możesz wybrać format standardowy, własny format niestandardowy lub format automatycznie lokalizowany.
ISO 8601
Możesz wywołać toStringmetody formatowania tekstu przy użyciu wspólnego i rozsądnego standardu ISO 8601 .
String output = instant.toString();
2016-03-23T03: 09: 01.613Z
Należy pamiętać ZonedDateTime, że toStringmetoda rozszerza standard ISO 8601, dodając nazwę strefy czasowej w nawiasach kwadratowych. Niezwykle przydatne i ważne informacje, ale nie standardowe.
Określ Localejęzyk ludzki (angielski, francuski itp.), Który ma być używany przy tłumaczeniu nazwy dnia / miesiąca, a także przy definiowaniu norm kulturowych, takich jak porządek roku, miesiąca i daty. Pamiętaj, że Localenie ma to nic wspólnego ze strefą czasową.
formatter = formatter.withLocale(Locale.US );// Or Locale.CANADA_FRENCH or such.String output = zdt.format( formatter );
Lokalizacja
Jeszcze lepiej, pozwól java.time wykonać automatyczną lokalizację.
DateTimeFormatter formatter =DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM );String output = zdt.format( formatter.withLocale(Locale.US ));// Or Locale.CANADA_FRENCH and so on.
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj stos przepełnienia dla wielu przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie potrzeba ciągów, nie ma potrzeby java.sql.*klas.
@ giraffe.guru Ponownie przeczytaj moją odpowiedź. Przegapiłeś trzecią kulę. Duża część funkcji java.time została przeniesiona z powrotem do Java 6 i 7 w ThreeTen-Backport, a następnie dostosowana do Androida w ThreeTenABP .
Basil Bourque,
Instant.now()i ZonedDateTime.now()jest wymagany API 26
Ryde,
2
@Ryde Jak powiedziałem giraffe.guru, przeczytaj ponownie moją odpowiedź. Poszukaj trzeciego punktu, w którym wspomniano „Android”.
Basil Bourque,
Wierzę, że masz rację: twoja nowa tabela edycji java.time przekazuje wiadomość bardziej bezpośrednio i łatwiej niż listę punktowaną. Gdybym to był ja, myślę, że skomplikowałbym sprawy jeszcze bardziej i umieściłem znacznik wyboru w nawiasach (lub coś podobnego) w ThreeTenBackport / Java 8+, a także w ThreeTenABP / Android 26+, ponieważ te kombinacje działają, tylko nie ma zazwyczaj nie ma sensu ich używać. Tworzone aplikacje na Androida, które używają ThreeTenABP i są ukierunkowane na szereg poziomów interfejsu API Androida zarówno powyżej, jak i poniżej poziomu 26. Wydaje mi się, że w takich przypadkach programiści wybierają dobrze.
Ole VV
1
@ OleV.V. Dziękujemy za zasugerowanie dodatkowego znacznika wyboru w tabeli graficznej. Korzystałem z tego w późniejszych wersjach tabeli. Bardzo ulepszony.
Basil Bourque
52
Aby uzyskać bieżący czas, możesz użyć System.currentTimeMillis()standardowego języka Java. Następnie możesz użyć go do utworzenia daty
Date currentDate =newDate(System.currentTimeMillis());
I jak wspomniano przez innych, aby stworzyć czas
Time currentTime =newTime();
currentTime.setToNow();
Nie ma potrzeby System.currentTimeMillis(); po prostu new Date()robi to samo .
Jonik
@Jonik Cannot resolve constructor Date()w Androidzie, Android SDK używa mieszanki Java 6 i 7.
surfer190
1
Dziękuję Ci. Date currentDate = new Date(System.currentTimeMillis());jest poprawne
mghhgm
@mghhgm Nie, new Date(System.currentTimeMillis())nie w porządku: (a) jest zbędny, ponieważ jest dokładnie taki sam jak new Date(). (b) Kłopotliwa java.util.Dateklasa jest teraz wypierana java.time.Instantod wersji Java 8 i nowszych. Przeniesiono z powrotem do Java 6 i 7 w projekcie ThreeTen-Backport oraz do wcześniejszego Androida (<26) w ThreeTenABP .
Basil Bourque,
37
Możesz użyć kodu:
Calendar c =Calendar.getInstance();SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");String strDate = sdf.format(c.getTime());
Wynik:
2014-11-1100:47:55
Można również uzyskać pewne opcje formatowania dla bardziej SimpleDateFormatod tutaj .
w jaki sposób można uzyskać datę na następne 5-10 dni .. czy to ręczne obliczanie tutaj?
CoDe,
@CoDe Używasz do tego Data
FindOutIslamNow
27
Istnieje kilka opcji, ponieważ Android to głównie Java, ale jeśli chcesz napisać go w widoku tekstowym, następujący kod by załatwił sprawę:
String currentDateTimeString =DateFormat.getDateInstance().format(newDate());// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
Powinieneś użyć Calendarlub GregorianCalendar. DateKlasa jest przestarzałe.
Joseph Earl
Dzięki kolego :) Nie miałem o tym
pojęcia
12
Zgodnie z dokumentacją referencyjną Date () ( developer.android.com/reference/java/util/Date.html ) nic nie odnosi się do przestarzałej klasy Date () - jednak kilka metod i konstruktorów jest przestarzałych.
Zac Seth
2
Spowoduje to niepoprawny wynik w świetle bieżących ustawień użytkownika (na przykład format czasu 12/24). Użyj android.text.format.DateFormat.getTimeFormat (kontekst kontekstowy), aby uzyskać DateFormat dla bieżących ustawień użytkownika.
G Era designator (before christ, after christ)
y Year(e.g.12or2012).Use either yy or yyyy.
M Monthin year.Numberof M's determine length of format (e.g. MM, MMM or MMMMM)
d Day in month. Number of d's determine length of format (e.g. d or dd)
h Hourof day,1-12(AM / PM)(normally hh)
H Hourof day,0-23(normally HH)
m Minutein hour,0-59(normally mm)
s Secondin minute,0-59(normally ss)
S Millisecondin second,0-999(normally SSS)
E Dayin week (e.g Monday,Tuesday etc.)
D Dayin year (1-366)
F Dayof week in month (e.g.1stThursdayofDecember)
w Weekin year (1-53)
W Weekin month (0-5)
a AM / PM marker
k Hourin day (1-24, unlike HH's 0-23)
K Hour in day, AM / PM (0-11)
z Time Zone
Chociaż inne odpowiedzi też są poprawne. Podobała mi się ta odpowiedź, ponieważ pomaga również w pokrewnych problemach związanych z czasem. Dzięki @Vighnesh KM
Nie podoba mi się ścisłe połączenie logiki prezentacji i logiki procesu; Wolałbym metodę, która po prostu formatuje i przyjmuje parametr wprowadzania daty. Nie rozumiem również, dlaczego używasz 2 SimpleDateFormats i 2 Dates ... nie możesz po prostu użyć raz "yyyy/MM/dd HH:mm"jako formatu i kalendarza połączeń?
AjahnCharles
12
Time time =newTime();
time.setToNow();System.out.println("time: "+ time.hour+":"+time.minute);
To da ci na przykład 12:32.
Pamiętaj, aby zaimportować android.text.format.Time;
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.O){
val current =LocalDateTime.now()
val formatter =DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")var myDate:String= current.format(formatter)Log.d("Date","DATE : "+ myDate)}else{var date =Date()
val formatter =SimpleDateFormat("MMM dd yyyy HH:mma")
val myDate:String= formatter.format(date)Log.d("Date","DATE : "+ myDate)}
Data Formater wzorce
"yyyy.MM.dd G 'at' HH:mm:ss z"----2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz"-----------12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
Dzięki za chęć współpracy. Czy przyczyniasz się do czegoś, czego nie ma w poprzednich 36 odpowiedziach? W każdym razie nadal używasz notorycznie kłopotliwej i dawno przestarzałej SimpleDateFormatklasy. Nawet przed Oreo nie musisz tego robić , zamiast tego możesz użyć ThreeTenABP , backportu java.time, nowoczesnego interfejsu API daty i godziny Java.
Ole VV
11
Możesz także użyć android.os.SystemClock. Na przykład SystemClock.elapsedRealtime () daje dokładniejsze odczyty czasu, gdy telefon śpi.
DateFormat df =newSimpleDateFormat("HH:mm");// Format timeString time = df.format(Calendar.getInstance().getTime());DateFormat df1 =newSimpleDateFormat("yyyy/MM/dd");// Format dateString date = df1.format(Calendar.getInstance().getTime());
Powinieneś używać klasy Calender zgodnie z nowym API. Klasa daty jest teraz przestarzała.
Calendar cal =Calendar.getInstance();String date =""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);String time =""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);
Date date =newDate();SimpleDateFormat dateFormatWithZone =newSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());String currentDate = dateFormatWithZone.format(date);
Odpowiedzi:
Możesz użyć:
W Kalendarzu jest mnóstwo stałych na wszystko, czego potrzebujesz.
Edycja:
sprawdź dokumentację klasy kalendarza
źródło
Calendar.getInstance().getTime()
lubCalendar.getInstance().getTimeInMillis()
zadziała.Możesz ( ale już nie powinieneś - patrz poniżej!) Korzystać z android.text.format.Time :
Z odnośnika powyżej:
UWAGA 1: Minęło kilka lat, odkąd napisałem tę odpowiedź, i dotyczy starej, specyficznej dla Androida, a teraz przestarzałej klasy. Google mówi teraz , że „[jego] klasa ma wiele problemów i zaleca się, aby zamiast tego używać GregorianCalendar ”.
UWAGA 2: Mimo że
Time
klasa matoMillis(ignoreDaylightSavings)
metodę, jest to jedynie wygoda przejścia do metod, które oczekują czasu w milisekundach. Wartość czasu jest precyzyjna tylko do jednej sekundy ; część milisekund jest zawsze000
. Jeśli robisz to w pętliWynikowa sekwencja będzie powtarzać tę samą wartość, np. Do
1410543204000
momentu rozpoczęcia następnej sekundy, kiedy1410543205000
to zacznie się powtarzać.źródło
SystemClock.uptimeMillis()
odmierzanie czasu. Ponieważ tego właśnie używa większość wbudowanych funkcji, istnieje silna motywacja, aby była dobrze zaimplementowana na wszystkich urządzeniach. Zobacz dyskusję w SystemClock ... Jeśli chcesz skorelować to z porą dnia, w aplikacji onResume aplikacji przeczytaj zarówno to, jak i Time / setToNow / toMillis. Pamiętaj różnicę między nimi.GregorianCalendar
został zastąpiony wiele lat temu w Javie, a później w systemie Android , w szczególności przez klasy java.timeZonedDateTime
. W przypadku wcześniejszego Androida zobacz projekty ThreeTen-Backport i ThreeTenABP .Jeśli chcesz ustawić datę i godzinę według określonego wzoru, możesz użyć następujących opcji:
Lub,
Data :
Czas:
źródło
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
w środkuDla tych, którzy wolą niestandardowy format, możesz użyć:
Podczas gdy możesz mieć wzorce DateFormat, takie jak:
źródło
W rzeczywistości bezpieczniej jest ustawić bieżącą strefę czasową ustawioną na urządzeniu
Time.getCurrentTimezone()
, w przeciwnym razie otrzymasz aktualny czas w UTC.Następnie możesz uzyskać wszystkie wymagane pola daty, na przykład:
Zobacz klasę android.text.format.Time dla wszystkich szczegółów.
AKTUALIZACJA
Jak wskazuje wiele osób, Google twierdzi, że ta klasa ma wiele problemów i nie powinna być już używana:
źródło
Dla bieżącej daty i godziny użyj:
Które wyjścia:
źródło
Spróbuj w ten sposób Wszystkie formaty podano poniżej, aby uzyskać format daty i godziny.
źródło
tl; dr
…lub…
Detale
Pozostałe odpowiedzi, choć poprawne, są nieaktualne. Stare klasy czasowe okazały się źle zaprojektowane, zagmatwane i kłopotliwe.
java.time
Te stare klasy zostały zastąpione przez środowisko java.time .
Te nowe klasy są inspirowane bardzo udanym projektem Joda-Time , zdefiniowanym przez JSR 310 i rozszerzonym o projekt ThreeTen-Extra .
Zobacz samouczek Oracle .
Instant
Instant
Jest moment na osi czasu w UTC z rozdzielczość do nanosekund .Strefa czasowa
Zastosuj strefę czasową (
ZoneId
), aby uzyskaćZonedDateTime
. Jeśli pominiesz strefę czasową, domyślnie zastosowana zostanie domyślna strefa czasowa JVM. Lepiej wyraźnie określić żądaną / oczekiwaną strefę czasową.Używać nazw stref czasowych w formacie
continent/region
takim jakAmerica/Montreal
,Europe/Brussels
lubAsia/Kolkata
. Nigdy nie używaj 3-4 literowych skrótów, takich jakEST
lub,IST
ponieważ nie są one znormalizowane ani unikalne.Generowanie ciągów
Możesz łatwo wygenerować
String
jako tekstową reprezentację wartości daty i godziny. Możesz wybrać format standardowy, własny format niestandardowy lub format automatycznie lokalizowany.ISO 8601
Możesz wywołać
toString
metody formatowania tekstu przy użyciu wspólnego i rozsądnego standardu ISO 8601 .Należy pamiętać
ZonedDateTime
, żetoString
metoda rozszerza standard ISO 8601, dodając nazwę strefy czasowej w nawiasach kwadratowych. Niezwykle przydatne i ważne informacje, ale nie standardowe.Format niestandardowy
Lub określ własny wzór formatowania za pomocą
DateTimeFormatter
klasy.Określ
Locale
język ludzki (angielski, francuski itp.), Który ma być używany przy tłumaczeniu nazwy dnia / miesiąca, a także przy definiowaniu norm kulturowych, takich jak porządek roku, miesiąca i daty. Pamiętaj, żeLocale
nie ma to nic wspólnego ze strefą czasową.Lokalizacja
Jeszcze lepiej, pozwól java.time wykonać automatyczną lokalizację.
O java.time
Środowisko java.time jest wbudowane w Javę 8 i nowsze wersje . Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak
java.util.Date
,Calendar
, iSimpleDateFormat
.Projekt Joda-Time , teraz w trybie konserwacji , zaleca migrację do klas java.time .
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj stos przepełnienia dla wielu przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie potrzeba ciągów, nie ma potrzeby
java.sql.*
klas.Gdzie można uzyskać klasy java.time?
źródło
Instant.now()
iZonedDateTime.now()
jest wymagany API 26Aby uzyskać bieżący czas, możesz użyć
System.currentTimeMillis()
standardowego języka Java. Następnie możesz użyć go do utworzenia datyI jak wspomniano przez innych, aby stworzyć czas
źródło
System.currentTimeMillis()
; po prostunew Date()
robi to samo .Cannot resolve constructor Date()
w Androidzie, Android SDK używa mieszanki Java 6 i 7.Date currentDate = new Date(System.currentTimeMillis());
jest poprawnenew Date(System.currentTimeMillis())
nie w porządku: (a) jest zbędny, ponieważ jest dokładnie taki sam jaknew Date()
. (b) Kłopotliwajava.util.Date
klasa jest teraz wypieranajava.time.Instant
od wersji Java 8 i nowszych. Przeniesiono z powrotem do Java 6 i 7 w projekcie ThreeTen-Backport oraz do wcześniejszego Androida (<26) w ThreeTenABP .Możesz użyć kodu:
Wynik:
Można również uzyskać pewne opcje formatowania dla bardziej
SimpleDateFormat
od tutaj .źródło
java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są teraz spuścizną , wyparte przez klasy java.time wbudowane w Javę 8 i nowsze wersje . Zobacz samouczek Oracle .Łatwo, możesz przeanalizować czas, aby uzyskać osobne wartości dla bieżącego czasu, w następujący sposób:
To samo dotyczy daty, jak następuje:
źródło
Istnieje kilka opcji, ponieważ Android to głównie Java, ale jeśli chcesz napisać go w widoku tekstowym, następujący kod by załatwił sprawę:
źródło
Calendar
lubGregorianCalendar
.Date
Klasa jest przestarzałe.Format daty Wzory
źródło
źródło
Jest to metoda przydatna do uzyskania daty i godziny:
Możesz wywołać tę metodę i uzyskać bieżące wartości daty i godziny:
źródło
SimpleDateFormat
s i 2Date
s ... nie możesz po prostu użyć raz"yyyy/MM/dd HH:mm"
jako formatu i kalendarza połączeń?To da ci na przykład 12:32.
Pamiętaj, aby zaimportować android.text.format.Time;
źródło
źródło
Aby wyświetlić bieżącą datę i godzinę w formacie, użyj
W Javie
W Kotlinie
Data Formater wzorce
źródło
SimpleDateFormat
klasy. Nawet przed Oreo nie musisz tego robić , zamiast tego możesz użyć ThreeTenABP , backportu java.time, nowoczesnego interfejsu API daty i godziny Java.Możesz także użyć android.os.SystemClock. Na przykład SystemClock.elapsedRealtime () daje dokładniejsze odczyty czasu, gdy telefon śpi.
źródło
Jeśli potrzebujesz bieżącej daty:
Jeśli potrzebujesz aktualnego czasu:
źródło
W celu dostosowania formatu godziny i daty:
Dane wyjściowe są jak poniżej: 2015-06-18T10: 15: 56-05: 00
źródło
źródło
Wypróbuj to również dla mnie.
źródło
Możesz uzyskać datę, używając:
To da ci wynik w ładnej formie, jak w tym przykładzie: „2014/02/09”.
źródło
Time t = new Time();
użyje domyślnej strefy czasowej. Z mojego doświadczenia wynika, że domyślnie == bieżący.Cóż, miałem problemy z niektórymi odpowiedziami z API, więc sfotografowałem ten kod, mam nadzieję, że służy on chłopcom:
Wyjście: 15:25 - 2017/10/03
źródło
Możesz po prostu użyć następującego kodu:
źródło
Spróbuj tego
źródło
Poniższa metoda zwróci bieżącą datę i godzinę w ciągu, użyj innej strefy czasowej zgodnie z rzeczywistą strefą czasową. Użyłem GMT
źródło
Powinieneś używać klasy Calender zgodnie z nowym API. Klasa daty jest teraz przestarzała.
źródło
Spróbuj użyć poniższego kodu:
źródło