Jak mogę sprawdzić aktualną datę w systemie Android?


165

Napisałem następujący kod

Date d = new Date();
CharSequence s  = DateFormat.format("MMMM d, yyyy ", d.getTime());

Ale pyta mnie o parametr, chcę aktualną datę w formacie ciągu,

lubić

28-Dec-2011

tak że można ustawić na TextView,

wyjaśnij trochę, jeśli uważasz, że coś jest konieczne, jestem nowy w programowaniu na Androida.


1
Chociaż korzystanie z DateFormatklasy było OK, gdy zadawano to pytanie w 2011 r., Klasa ta i jej podklasa SimpleDateFormatzawsze były kłopotliwe i są teraz dawno nieaktualne. Nie radzę ich używać i zamiast tego zajrzeć do java.time, nowoczesnego API daty i czasu w Javie .
Ole VV

Odpowiedzi:


389

Możesz użyć SimpleDateFormatklasy do sformatowania daty w wybranym formacie.

Po prostu sprawdź ten link, gdzie masz pomysł na swój przykład.

Na przykład:

String dateStr = "04/05/2010"; 
 
SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy"); 
Date dateObj = curFormater.parse(dateStr); 
SimpleDateFormat postFormater = new SimpleDateFormat("MMMM dd, yyyy"); 
 
String newDateStr = postFormater.format(dateObj); 

Aktualizacja:

Szczegółowy przykład znajduje się tutaj , sugeruję, abyś przejrzał ten przykład i zrozumiał pojęcie klasy SimpleDateFormat.

Ostateczne rozwiązanie:

Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
String formattedDate = df.format(c);

możesz zamiast tego użyć metody System.currentTimeMillis () lub klasy Data zamiast klasy Calendar. Powinno być szybsze. stackoverflow.com/questions/368094/…
cjayem13

To wymaga API 24!
ueen

FYI, strasznie kłopotliwe klasy daty i czasu, takie jak java.util.Date, java.util.Calendari java.text.SimpleDateFormatsą teraz starsze , zastąpione przez klasy java.time wbudowane w Javę 8 i nowsze. Zobacz samouczek firmy Oracle .
Basil Bourque,

@ueen Proszę zaimportować z pakietu java, a nie z Androida.
Sadda Hussain

Działa grzywny? Obecnie? (2020)
krzyż

152

Jest to prosty, jednowierszowy kod do pobierania aktualnej daty w formacie rrrr-MM-dd , którego możesz użyć w wybranym przez siebie formacie:

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

7
Należy go zmienić na: String currentDate = new SimpleDateFormat ("dd-MM-rrrr", Locale.getDefault ()). Format (new Date ());
Bart Burg

1
Wow, dziękuję! To zadziałało, chociaż wydaje mi się, że mogłem się dowiedzieć, dlaczego data na moim urządzeniu wirtualnym była wyświetlana dzień wcześniej, prawdopodobnie dlatego, że data na maszynie wirtualnej była nieprawidłowa. Testowany na prawdziwym telefonie zdziałał cuda. Więc dziękuję @Pratik
wesley franks

30

Nie ma to nic wspólnego z Androidem, ponieważ jest oparty na Javie, więc możesz użyć

private String getDateTime() { 
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   return dateFormat.format(date); 
}

Występują błędy, nowa Date () prosi o argumenty, a Ty inicjalizujesz DateFormat za pomocą SimpleDateFormat, również niepoprawny
Chatar Veer Suthar

12
 public String giveDate() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d, yyyy");
    return sdf.format(cal.getTime());
 }

11

Spróbuj tego,

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);

mówi: dodaj argumenty do nowej daty (długiej)
Chatar Veer Suthar

w nowej Date () nie może zapytać o długi parametr.
Lucyfer,

Dlaczego używasz prywatnego klucza, uruchamiasz kod w projekcie Android, czy otrzymujesz wynik?
Chatar Veer Suthar

usuń to „prywatne”. tak, widzę twoją dyskusję. Nie wiem, dlaczego masz problem z bardzo prostym zapytaniem.
Lucyfer,


7

Działa jak urok i jako bonus konwertuje na String;)

SimpleDateFormat currentDate = new SimpleDateFormat("dd/MM/yyyy");
      Date todayDate = new Date();
    String thisDate = currentDate.format(todayDate);

5
 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

// importuj klasę Date jako java.util



4
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String date = df.format(Calendar.getInstance().getTime());

4

Udzielam nowoczesnej odpowiedzi.

java.time i ThreeTenABP

Aby uzyskać aktualną datę:

    LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));

Daje ci to LocalDateobiekt, którego powinieneś używać do przechowywania daty w programie. A LocalDateto data bez godziny.

Tylko wtedy, gdy musisz wyświetlić datę użytkownikowi, sformatuj ją w ciągu odpowiednim dla ustawień regionalnych użytkownika:

    DateTimeFormatter userFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    System.out.println(today.format(userFormatter));

Kiedy uruchomiłem dzisiaj ten fragment kodu w ustawieniach regionalnych w języku angielskim (USA), wynik był następujący:

13 lipca 2019 r

Jeśli chcesz, żeby był krótszy, określ FormatStyle.MEDIUMlub nawet FormatStyle.SHORT. DateTimeFormatter.ofLocalizedDateużywa domyślnych ustawień regionalnych formatowania, więc chodzi o to, że da wynik odpowiedni dla tego ustawienia narodowego, różny dla różnych ustawień regionalnych.

Jeśli użytkownik ma bardzo specjalne wymagania dotyczące formatu wyjściowego, użyj łańcucha wzorca formatu:

    DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
            "d-MMM-u", Locale.forLanguageTag("ar-AE"));

13-يول -2019

Używam i polecam java.time, nowoczesny API daty i czasu Java. DateFormat, SimpleDateFormat, DateI Calendarużywane w pytaniu i / lub wiele innych odpowiedzi, są źle zaprojektowane i dawno nieaktualne. Praca z java.time jest o wiele przyjemniejsza.

Pytanie: Czy mogę używać java.time na Androidzie?

Tak, java.time działa dobrze na starszych i nowszych urządzeniach z Androidem. Wymaga tylko co najmniej Javy 6 .

  • W Javie 8 i nowszych wersjach oraz na nowszych urządzeniach z Androidem (od poziomu API 26) wbudowane jest nowoczesne API.
  • W Javie 6 i 7 pobierz ThreeTen Backport, zaplecze nowoczesnych klas (ThreeTen dla JSR 310; zobacz linki na dole).
  • Na (starszym) systemie Android użyj wersji ThreeTen Backport na Androida. Nazywa się ThreeTenABP. I upewnij się, że importujesz klasy daty i czasu org.threeten.bpz podpakietami.

Spinki do mankietów


Bardzo dobra odpowiedź! Ale jak mogę przekonwertować ThreeTen LocalDateTime na Date? Używam Firebase, a warunkiem zapisania znacznika czasu jest obiekt Date.
H.Karatsanov

@ H.Karatsanov przypadku korzystania z backportu: DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). W przypadku korzystania z wbudowanej java.time: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Zobacz Konwersja między java.time.LocalDateTime a java.util.Date . Jest tam autorytatywna odpowiedź JodaStephena, a także odpowiedź pokazująca użycie backportu .
Ole VV

4
 public static String getcurrentDateAndTime(){

        Date c = Calendar.getInstance().getTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        String formattedDate = simpleDateFormat.format(c);
        return formattedDate;
    }

// String currentdate=  getcurrentDateAndTime();

Czy wnosi coś istotnego do pytania ( chcę mieć aktualną datę w formacie ciągowym, np.28-Dec-2011 ), Czego nie ma w innych odpowiedziach? W każdym razie nadal używa notorycznie kłopotliwej i dawno przestarzałej SimpleDateFormatklasy. Proszę, nie potrzebujemy więcej odpowiedzi, aby to zrobić.
Ole VV

to działa zgodnie z najlepszymi praktykami, dodaj drugi parametr locale SimpleDateFormat simpleDateFormat = nowy SimpleDateFormat ("rrrr / MM / dd", Locale.ENGLISH);
Rucha Bhatt Joshi

3
Calendar cal = Calendar.getInstance();      
Calendar dt = Calendar.getInstance(); 
dt.clear();
dt.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); 
return dt.getTime();        

3

Prosta poprawka do rozwiązania Paresha:

Date date = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(date);

3
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
String date = day + "/" + (month + 1) + "/" + year;

Log.i("TAG", "--->" + date);

2

Możesz użyć następującego kodu, aby uzyskać datę w wybranym formacie.

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));

Ładny jeden liner i działa na niższych Sdks. O kilka znaków krócej DateFormat.format („dd-MM-yyyy”, new java.util.Date ()). ToString ()
Jeffrey

1
Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(c);

To jest najlepsza odpowiedź ...


0

Najprostszy sposób, aby uzyskać aktualną datę w bieżących lokalizacjach (ustawienia regionalne urządzenia!):

String currentDate = DateFormat.getDateInstance().format(Calendar.getInstance().getTime());

Jeśli chcesz mieć datę w różnych stylach użyj getDateInstance(int style):

DateFormat.getDateInstance(DateFormat.FULL).format(Calendar.getInstance().getTime());

Inne style: DateFormat.LONG, DateFormat.DATE_FIELD, DateFormat.DAY_OF_YEAR_FIELD, itd. (Wykorzystanie CTRL+Spacezobaczyć wszystkie z nich)

Jeśli też potrzebujesz czasu:

String currentDateTime = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.LONG).format(Calendar.getInstance().getTime());

0
  public static String getDateTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM dd, yyyy HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return simpleDateFormat.format(date);
    }

0

spróbuj z tym linkiem do kodu, to jest absolutnie poprawna odpowiedź dla wszystkich przypadków we wszystkich datach i godzinach. lub dostosuj datę i godzinę zgodnie z potrzebami i wymaganiami aplikacji.

spróbuj z tym linkiem. spróbuj z tym linkiem


0

Napisałem aplikację kalendarza przy użyciu CalendarView i to mój kod:

CalendarView cal = (CalendarView) findViewById(R.id.calendar);
cal.setDate(new Date().getTime());

Pole kalendarza to mój widok kalendarza. Import:

import android.widget.CalendarView;
import java.util.Date;

Mam aktualną datę bez błędów.


0

Oto kod, którego użyłem:

             Date date = new Date();  // to get the date
             SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); // getting date in this format
             String formattedDate = df.format(date.getTime());
             text.setText(formattedDate);

0

Użyłem już tego:

Date What_Is_Today=Calendar.getInstance().getTime();
SimpleDateFormat Dateformat = new SimpleDateFormat("dd-MM-yyyy");
String Today=Dateformatf.format(What_Is_Today);

Toast.makeText(this,Today,Toast.LENGTH_LONG).show();

najpierw dostaję czas, potem zadeklarowałem prosty format daty (aby uzyskać datę: 19-6-2018), a następnie używam formatu, aby zmienić datę na ciąg.


0

tylko jeden kod liniowy, aby uzyskać prosty format daty:

SimpleDateFormat.getDateInstance().format(Date())

wyjście: 18-maj-2020

SimpleDateFormat.getDateTimeInstance().format(Date())

wyjście: 18-maj-2020 11:00:39

SimpleDateFormat.getTimeInstance().format(Date())

wyjście: 11:00:39

Mam nadzieję, że ta odpowiedź wystarczy, aby uzyskać ten format daty i czasu ... :)


Proszę nie uczyć młode używać długo przestarzałe i notorycznie kłopotliwych SimpleDateFormati DateFormatklas. Przynajmniej nie jako pierwsza opcja. I nie bez zastrzeżeń. Dziś mamy o wiele lepsze java.time, nowoczesne API daty i czasu w Javie i jego DateTimeFormatter. Tak, możesz go używać na Androidzie. W przypadku starszego Androida zobacz Jak używać ThreeTenABP w Android Project .
Ole VV

-1

Oto kod, którego użyłem :

final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);

// Set current date into textview
tvDisplayDate.setText(new StringBuilder()
    .append(month + 1).append("-") // Month is 0 based, add 1
    .append(day).append("-")
    .append(year).append("   Today is :" + thursday ) );

// Set current date into datepicker
dpResult.init(year, month, day, null);
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.