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.

Chatar Veer Suthar
źródło
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);
Paresh Mayani
źródło
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());
Pratik Butani
źródło
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); 
}
Graham Smith
źródło
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());
 }
Kamal
źródło
11

Spróbuj tego,

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);
Lucyfer
źródło
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
CharSequence s  = DateFormat.getDateInstance().format("MMMM d, yyyy ");

Najpierw potrzebujesz instancji

Marthyn Olthof
źródło
getDateInstance, nie rozpoznając tego
Chatar Veer Suthar
jeśli spojrzysz na dokumentację java, powinna to być, docs.oracle.com/javase/6/docs/api/java/text/… , java.util.Locale)
Marthyn Olthof
@Veer, jeśli przypadkowo zaimportowałeś android.text.format.DateFormat zamiast java.text.DateFormat, getDateInstance () nie zostanie rozpoznane
gcbound
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);
SoVinceble
źródło
5
 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

// importuj klasę Date jako java.util

arshad shaikh
źródło
4

Poniższy kod wyświetla godzinę i datę

Calendar cal = Calendar.getInstance();
cal.getTime().toString();
Rajeswari Kotikalapudi
źródło
4
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String date = df.format(Calendar.getInstance().getTime());
Zeeshan Ali
źródło
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

Ole VV
źródło
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();
indrajeet jyoti
źródło
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();        
Vinayak
źródło
3

Prosta poprawka do rozwiązania Paresha:

Date date = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(date);
cNgamba
źródło
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);
rhaldar
źródło
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()));
Android Dev
źródło
Ł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ź ...

Fatima
źródło
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());
Ivo Stoyanov
źródło
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);
    }
Divyesh Patel
źródło
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

Amitsharma
źródło
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.

Muskovets
źródło
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);
Savita Sharma
źródło
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.

Farshid Ahmadi
źródło
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 ... :)

vijay saini
źródło
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);
dondondon
źródło