Odpowiedzi:
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
Calendar.getInstance().getTime()
lub Calendar.getInstance().getTimeInMillis()
zadziała.
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 Time
klasa 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 1410543204000
momentu rozpoczęcia następnej sekundy, kiedy 1410543205000
to zacznie się powtarzać.
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:
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());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
w środku
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
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.
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
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);
Instant.now() // Current moment in UTC.
…lub…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Pozostałe odpowiedzi, choć poprawne, są nieaktualne. Stare klasy czasowe okazały się źle zaprojektowane, zagmatwane i kłopotliwe.
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 .
Instant instant = Instant.now(); // Current moment in UTC.
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 jak America/Montreal
, Europe/Brussels
lub Asia/Kolkata
. Nigdy nie używaj 3-4 literowych skrótów, takich jak EST
lub, IST
ponieważ 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 );
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.
Możesz wywołać toString
metody 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 toString
metoda 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]
Lub określ własny wzór formatowania za pomocą DateTimeFormatter
klasy.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
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, że Locale
nie ma to nic wspólnego ze strefą czasową.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
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.
Ś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?
Instant.now()
i ZonedDateTime.now()
jest wymagany API 26
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();
Cannot resolve constructor Date()
w Androidzie, Android SDK używa mieszanki Java 6 i 7.
Date currentDate = new Date(System.currentTimeMillis());
jest poprawne
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.Date
klasa jest teraz wypierana java.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:
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 SimpleDateFormat
od tutaj .
java.util.Date
, java.util.Calendar
i java.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:
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);
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);
Calendar
lub GregorianCalendar
. Date
Klasa jest przestarzałe.
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
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);
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
SimpleDateFormat
s i 2 Date
s ... nie możesz po prostu użyć raz "yyyy/MM/dd HH:mm"
jako formatu i kalendarza połączeń?
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);
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
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.
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));
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
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
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”.
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:
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
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());
Spróbuj tego
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
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);
}
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);
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);