Wyświetl aktualną godzinę i datę w aplikacji na Androida

Odpowiedzi:

301

Dobra, nie tak trudne, ponieważ istnieje kilka metod, aby to zrobić. Zakładam, że chcesz umieścić bieżącą datę i godzinę w TextView.

String currentDateTimeString = java.text.DateFormat.getDateTimeInstance().format(new Date());

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

Dokumentacja zawiera więcej informacji, które można łatwo znaleźć tutaj . Znajdziesz tam więcej informacji na temat zmiany formatu używanego do konwersji.

Zordid
źródło
43
Proszę - wyraźniej! Jaki jest błąd? Czy zaimportowałeś niewłaściwą klasę DateFormat? To java.text.DateFormati NIE android.text.format.DateFormat! I to jest java.util.Datei NIE java.sql.Date! Mała wskazówka na temat zadawania pytań: staraj się być precyzyjny, np .: zadeklaruj, co masz na myśli, mówiąc „wyświetl” w swoim pytaniu. A kiedy wpiszesz moje wiersze - zarówno Date, jak i DateFormat, oczywiście, muszą zostać zaimportowane - jeśli istnieje wybór 2 dla każdego, przynajmniej możesz spróbować dowolnej kombinacji: to tylko 4!
Zordid
przepraszam proszę pana, mam datę, a nie czas. podobnie możemy dostać czas?
BIBEKRBARAL
28
Spójrz na developer.android.com/reference/java/text/SimpleDateFormat.html - tam możesz zobaczyć, jak dokładnie zdefiniować , co chcesz być w ciągu wyjściowym. Np. Na czas "HH:mm:ss"! Całkowicie:currentTimeString = new SimpleDateFormat("HH:mm:ss").format(new Date());
Zordid
2
Jest też DateFormat.getTimeInstance()i DateFormat.getDateTimeInstance().
Felix
Jak to jest wydajne? Powiedzmy, że potrzebujesz czasu na nieustanne strzelanie. Czy jest coś bardziej wydajnego niż tworzenie nowego obiektu Date za każdym razem?
keshav.bahadoor
125
public class XYZ extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);

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

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = df.format(c.getTime());
        // formattedDate have current date/time
        Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();


      // Now we display formattedDate value in TextView
        TextView txtView = new TextView(this);
        txtView.setText("Current Date and Time : "+formattedDate);
        txtView.setGravity(Gravity.CENTER);
        txtView.setTextSize(20);
        setContentView(txtView);
    }

}

wprowadź opis zdjęcia tutaj


źródło
1
android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.N (24).
kangear
Jak zadeklarować, SimpleDateFormatponieważ mam nie można znaleźć klasy symbolu
dubis
51
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    Thread myThread = null;

    Runnable runnable = new CountDownRunner();
    myThread= new Thread(runnable);   
    myThread.start();

}

public void doWork() {
    runOnUiThread(new Runnable() {
        public void run() {
            try{
                TextView txtCurrentTime= (TextView)findViewById(R.id.lbltime);
                    Date dt = new Date();
                    int hours = dt.getHours();
                    int minutes = dt.getMinutes();
                    int seconds = dt.getSeconds();
                    String curTime = hours + ":" + minutes + ":" + seconds;
                    txtCurrentTime.setText(curTime);
            }catch (Exception e) {}
        }
    });
}


class CountDownRunner implements Runnable{
    // @Override
    public void run() {
            while(!Thread.currentThread().isInterrupted()){
                try {
                doWork();
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                }catch(Exception e){
                }
            }
    }
}
Prashant
źródło
@Harshit ta funkcja jest dostarczana z zestawem Android SDK, o ile Twoja klasa rozszerza aktywność
Carlos P
2
Wiem, że to stare pytanie, ale jeśli ktoś znajdzie go w Google, takim jak ja, powinien wiedzieć, że metody Date.getX są przestarzałe.
tobi
38

Oczywiste opcje wyświetlania czasu to AnalogClockWidok i DigitalClockWidok .

Na przykład następujący układ:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="vertical">

    <AnalogClock
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"/>

    <DigitalClock 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center" 
        android:textSize="20sp"/>
</LinearLayout>

Wygląda tak:

zrzut ekranu

Dave Webb
źródło
4
Szanowny Panie, chcę wyświetlić aktualny czas za pomocą setText.
BIBEKRBARAL
5
Czuję się jak głupie gówno po przeczytaniu tej oczywistej odpowiedzi! Zaimplementowałem własne uruchamianie, uśpienie na określony czas i tak dalej, gdy oczywistą odpowiedzią był XML-one-liner! Ogromne podziękowania (ponad rok po poście) :-)
dbm
6
W 2015 roku jest przestarzałe i zaleca się stosowanie TextClock. :)
Evilripper
1
AnalogClock jest przestarzały na poziomie API 23, a AnalogClock i DigitalClock pokazują tylko bieżącą godzinę, ale nie bieżącą datę.
Zafer
34

Jeśli chcesz mieć pojedynczy wiersz kodu:

String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());

Wynik to "2016-09-25 16:50:34"

Mahdi Astanei
źródło
23

Moje własne działające rozwiązanie:

Calendar c = Calendar.getInstance();

String sDate = c.get(Calendar.YEAR) + "-" 
+ c.get(Calendar.MONTH)
+ "-" + c.get(Calendar.DAY_OF_MONTH) 
+ " at " + c.get(Calendar.HOUR_OF_DAY) 
+ ":" + c.get(Calendar.MINUTE);

Mam nadzieję że to pomoże!

Fred
źródło
Zastanawiam się, dlaczego c.get (Calendar.MONTH) zwraca 5, gdy jest rzekomo 6? Moje urządzenie ma prawidłowe ustawienia czasu.
Kris,
O tak, ale dlaczego muszą to robić, skoro inne zmienne były dokładne. :)
Kris,
1
Kalendarz c = Calendar.getInstance (); int miesiąc = c.get (Calendar.MONTH) + 1; Ciąg sDate = miesiąc + "-" + c.get (Calendar.DAY_OF_MONTH) + "-" + c.get (Calendar.YEAR) + "-" + c.get (Calendar.HOUR_OF_DAY) + ":" + c. pobierz (Calendar.MINUTE); to działa dobrze
577732
20

Jeśli chcesz uzyskać datę i godzinę według określonego wzoru, możesz użyć

Date d = new Date();
CharSequence s = DateFormat.format("yyyy-MM-dd hh:mm:ss", d.getTime());
Nam Vu
źródło
15

Od Jak uzyskać pełną datę i prawidłowy format? :

Proszę użyć

android.text.format.DateFormat.getDateFormat(Context context)
android.text.format.DateFormat.getTimeFormat(Context context)

aby uzyskać prawidłowe formaty czasu i daty w świetle bieżących ustawień użytkownika (na przykład format godziny 12/24).

import android.text.format.DateFormat;

private void some() {
    final Calendar t = Calendar.getInstance();
    textView.setText(DateFormat.getTimeFormat(this/*Context*/).format(t.getTime()));
}
wonder.mice
źródło
10

Oto kod, który działał dla mnie. Spróbuj tego. Jest to prosta metoda, która wymaga czasu i daty z wywołania systemowego. Metoda Datetime (), gdziekolwiek potrzebujesz.

public static String Datetime()
{
    Calendar c = Calendar .getInstance();
    System.out.println("Current time => "+c.getTime());
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mms");
    formattedDate = df.format(c.getTime());
    return formattedDate;
}
Vinoth
źródło
9

Posługiwać się:

Calendar c = Calendar.getInstance();

int seconds = c.get(Calendar.SECOND);
int minutes = c.get(Calendar.MINUTE);
int hour = c.get(Calendar.HOUR);
String time = hour + ":" + minutes + ":" + seconds;


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

// Assuming that you need date and time in a separate
// textview named txt_date and txt_time.

txt_date.setText(date);
txt_time.setText(time);
Joy Panchal
źródło
7
String formattedDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()); 

Użyj formattedDatejako Stringwypełnionej daty.
W moim przypadku:mDateButton.setText(formattedDate);

Bart
źródło
6
Calendar c = Calendar.getInstance();
int month=c.get(Calendar.MONTH)+1;
String sDate = c.get(Calendar.YEAR) + "-" + month+ "-" + c.get(Calendar.DAY_OF_MONTH) +
"T" + c.get(Calendar.HOUR_OF_DAY)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND);

To da format daty i godziny, jak 2010-05-24T18: 13: 00

Thomas VJ
źródło
6

Aby wyświetlić funkcję bieżącej daty:

Calendar c = Calendar.getInstance();

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String date = df.format(c.getTime());
Date.setText(date);

Musisz zaimportować

import java.text.SimpleDateFormat; import java.util.Calendar;

Musisz użyć

TextView Date;
Date = (TextView) findViewById(R.id.Date);
Habeeb Rahman kalathil
źródło
5

Dałoby to bieżącą datę i godzinę:

public String getCurrDate()
{
    String dt;
    Date cal = Calendar.getInstance().getTime();
    dt = cal.toLocaleString();
    return dt;
}
chetan
źródło
5

Po prostu skopiuj ten kod i mam nadzieję, że to zadziała.

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss a");
String strDate = sdf.format(c.getTime());
Parth Bhayani
źródło
3
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Toast.makeText(getApplicationContext(), currentDateandTime, Toast.LENGTH_SHORT).show();
Jaydev
źródło
3

Wypróbuj poniższy kod:

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);
duggu
źródło
3

Możesz spróbować w ten sposób

Calendar calendar = Calendar.getInstance();
SimpleDateFormat mdformat = new SimpleDateFormat("HH:mm:ss");
String strDate = "Current Time : " + mdformat.format(calendar.getTime());
Muhaiminur Rahman
źródło
2

Jeśli chcesz pracować z datą / godziną w Androidzie, polecam użyć ThreeTenABP, który jest wersją java.time.*pakietu (dostępną od API 26 na Androida) dostarczaną z Javą 8 dostępną jako zamiennik dla java.util.Datei java.util.Calendar.

LocalDate localDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
String date = localDate.format(formatter);
textView.setText(date);
kod sutuion
źródło
1
Mówiąc wprost, jestem pewien, że miałeś na myśli właściwą rzecz: java.time jest wbudowany z poziomu interfejsu API Androida 26. ThreeTenABP jest tym, czego używasz, aby uzyskać praktycznie taką samą funkcjonalność na niższych poziomach API . Kod może więc działać zarówno na niskim, jak i na wysokim poziomie.
Ole VV,
2
A ponieważ pytanie dotyczyło wyświetlania daty i godziny , w tym celu można użyć na przykład ZonedDateTimezamiast LocalDatei DateTimeFormatter.ofLocalizedDateTimezamiast ofLocalizedDate. W przeciwnym razie kod będzie taki sam.
Ole VV,
1

Aby wyświetlić bieżącą datę i godzinę w widoku tekstu

    /// For Show Date
    String currentDateString = DateFormat.getDateInstance().format(new Date());
    // textView is the TextView view that should display it
    textViewdate.setText(currentDateString);
    /// For Show Time
    String currentTimeString = DateFormat.getTimeInstance().format(new Date());
    // textView is the TextView view that should display it
    textViewtime.setText(currentTimeString);

Sprawdź pełny kod Androida - Wyświetl bieżącą datę i godzinę w przykładzie Android Studio z kodem źródłowym

Dharmendra Mishra
źródło
0

Aby uzyskać bieżącą datę / godzinę, użyj następującego fragmentu kodu:

Aby użyć czasu :

SimpleDateFormat simpleDateFormatTime = new SimpleDateFormat("HH:mm", Locale.getDefault());
String strTime = simpleDateFormatTime.format(now.getTime());

Aby użyć daty :

SimpleDateFormat simpleDateFormatDate = new SimpleDateFormat("E, MMM dd, yyyy", Locale.getDefault());    
String strDate = simpleDateFormatDate.format(now.getTime());

i jesteś gotowy iść.

Pankaj Lilan
źródło
0
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Calendar c = Calendar.getInstance();
Date date = Calendar.getInstance().getTime();
String sDate = format.format(date);//31-12-9999
int mYear = c.get(Calendar.YEAR);//9999
int mMonth = c.get(Calendar.MONTH);
mMonth = mMonth + 1;//12
int hrs = c.get(Calendar.HOUR_OF_DAY);//24
int min = c.get(Calendar.MINUTE);//59
String AMPM;
if (c.get(Calendar.AM_PM) == 0) {
    AMPM = "AM";
} else {
    AMPM = "PM";
}
pruthwiraj.kadam
źródło