Jak uzyskać aktualną godzinę i datę w Androidzie


1107

Jak mogę uzyskać aktualną godzinę i datę w aplikacji na Androida?


3
43 odpowiedzi! Chociaż wiele z nich było dobrych, gdy zostały napisane, dobra odpowiedź do wykorzystania w 2018 roku jest tutaj .
Ole VV

Odpowiedzi:


1308

Możesz użyć:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

W Kalendarzu jest mnóstwo stałych na wszystko, czego potrzebujesz.

Edycja:
sprawdź dokumentację klasy kalendarza


14
+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.
akousmata

487

Możesz ( ale już nie powinieneś - patrz poniżej!) Korzystać z android.text.format.Time :

Time now = new Time();
now.setToNow();

Z odnośnika powyżej:

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 = new Time();   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ć.


2
@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:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

Lub,

Data :

String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

Czas:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());

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 = new SimpleDateFormat("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

126

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 = new Time(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

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:

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.


Z którego pakietu należy zaimportować czas?
ManishSB

Ta klasa została uznana za przestarzałą na poziomie API 22. Możemy zamiast tego użyć GregorianCalendar.
Choletski

78

Dla bieżącej daty i godziny użyj:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Które wyjścia:

Feb 27, 2012 5:41:23 PM

mam aktualną datę, dzień i godzinę systemu, ale czas się nie zmienia. chcę zwiększyć czas z sekund na sekundy. jak mogę to zrobić?
Bhavesh Hirpara

2
Jest to zalecany sposób na zrobienie tego, zgodnie z interfejsem API Androida: developer.android.com/reference/java/text/… Dzięki!
M Granja,

58

Spróbuj w ten sposób Wszystkie formaty podano poniżej, aby uzyskać format daty i godziny.

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

pierwszy

druga trzeci


53

tl; dr

Instant.now()  // Current moment in UTC.

…lub…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // In a particular time zone

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

InstantJest moment na osi czasu w UTC z rozdzielczość do nanosekund .

 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ą.

Używać nazw stref czasowych w formacie continent/regiontakim jak America/Montreal, Europe/Brusselslub Asia/Kolkata. Nigdy nie używaj 3-4 literowych skrótów, takich jak ESTlub, ISTponieważ nie są one znormalizowane ani unikalne.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Tabela typów daty i godziny w Javie, zarówno nowoczesnych, jak i starszych

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.

2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]

Format niestandardowy

Lub określ własny wzór formatowania za pomocą DateTimeFormatterklasy.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

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.

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, i SimpleDateFormat.

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?

Tabela zawierająca listę implementacji technologii * java.time *, z których wersji Java i Android.


2
@ 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 = new Date(System.currentTimeMillis());

I jak wspomniano przez innych, aby stworzyć czas

Time currentTime = new Time();
currentTime.setToNow();

13
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 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

Wynik:

2014-11-11 00:47:55

Można również uzyskać pewne opcje formatowania dla bardziej SimpleDateFormatod tutaj .


Do Twojej wiadomości, kłopotliwe stare klasy daty i czasu, takie jak java.util.Date, java.util.Calendari java.text.SimpleDateFormatsą teraz spuścizną , wyparte przez klasy java.time wbudowane w Javę 8 i nowsze wersje . Zobacz samouczek Oracle .
Basil Bourque,

32

Łatwo, możesz przeanalizować czas, aby uzyskać osobne wartości dla bieżącego czasu, w następujący sposób:

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

To samo dotyczy daty, jak następuje:

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);

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(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);

8
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.
wonder.mice

@Zac masz rację, nawet metoda Data

24
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

Format daty Wzory

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of 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   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone

1
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
Ankit Gupta

17
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);

15

Jest to metoda przydatna do uzyskania daty i godziny:

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

Możesz wywołać tę metodę i uzyskać bieżące wartości daty i godziny:

2017/01//09 19:23

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 = new Time();
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;


12
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);

12

Aby wyświetlić bieżącą datę i godzinę w formacie, użyj

W Javie

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)

W Kotlinie

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.


10

Jeśli potrzebujesz bieżącej daty:

Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);

Jeśli potrzebujesz aktualnego czasu:

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));

9

W celu dostosowania formatu godziny i daty:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

Dane wyjściowe są jak poniżej: 2015-06-18T10: 15: 56-05: 00


8
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();

8
Time now = new Time();
now.setToNow();

Wypróbuj to również dla mnie.


8

Możesz uzyskać datę, używając:

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

To da ci wynik w ładnej formie, jak w tym przykładzie: „2014/02/09”.


Konstruktor bez parametrów Time t = new Time();użyje domyślnej strefy czasowej. Z mojego doświadczenia wynika, że ​​domyślnie == bieżący.
William T. Mallard

7

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:

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

Wyjście: 15:25 - 2017/10/03


7

Możesz po prostu użyć następującego kodu:

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());

6

Spróbuj tego

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());

To idealna jedna wkładka i eleganckie rozwiązanie. To wszystko, czego potrzeba, nie niepotrzebnie długie rozwiązania, jak w innych odpowiedziach.
zeeshan

5

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

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}

4

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);

4

Spróbuj użyć poniższego kodu:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.