Hiển thị thời gian và ngày hiện tại trong một ứng dụng Android


Câu trả lời:


302

Được rồi, không khó như có một số phương pháp để làm điều này. Tôi giả sử bạn muốn đặt ngày & giờ hiện tại vào a TextView.

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

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

Có nhiều thứ để đọc trong tài liệu có thể dễ dàng tìm thấy ở đây . Ở đó bạn sẽ tìm thấy thêm thông tin về cách thay đổi định dạng được sử dụng để chuyển đổi.


43
Xin vui lòng - rõ ràng hơn! Lỗi gì vậy? Bạn đã nhập sai lớp DateFormat? Đó là java.text.DateFormatvà KHÔNG android.text.format.DateFormat! Và nó java.util.Datevà KHÔNG java.sql.Date! Chỉ cần một gợi ý nhỏ khi đặt câu hỏi: cố gắng chính xác, ví dụ: khai báo ý của bạn bằng cách "hiển thị" trong câu hỏi của bạn. Và khi bạn nhập các dòng của tôi - tất nhiên cả Date và DateFormat đều phải được nhập - nếu có lựa chọn 2 cho mỗi dòng, thì ít nhất bạn có thể thử là bất kỳ kết hợp nào: đó chỉ là 4!
Zordid

Xin lỗi ngài, tôi đã hẹn hò không phải thời gian. Thật vui là chúng ta có thể có thời gian không?
BIBEKRebarAL

28
Hãy xem developer.android.com/reference/java/text/SimpleDateFormat.html - ở đó bạn có thể xem cách xác định chính xác những gì bạn muốn có trong chuỗi đầu ra của mình. Ví dụ để sử dụng thời gian "HH:mm:ss"! Hoàn toàn:currentTimeString = new SimpleDateFormat("HH:mm:ss").format(new Date());
Zordid

2
Cũng có DateFormat.getTimeInstance()DateFormat.getDateTimeInstance().
Felix

Làm thế nào là hiệu quả này? Giả sử bạn cần có thời gian từ một phương pháp bắn liên tục. Có điều gì hiệu quả hơn việc tạo một đối tượng Date mới mỗi lần không?
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);
    }

}

nhập mô tả hình ảnh ở đây


1
android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.N (24).
kangear

Cách khai báo SimpleDateFormatvì tôi không thể tìm thấy lớp biểu tượng
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){
                }
            }
    }
}

@Harshit chức năng này đi kèm với SDK Android miễn là lớp của bạn mở rộng Hoạt động
Carlos P

2
Tôi biết đây là câu hỏi cũ, nhưng nếu ai đó sẽ tìm thấy nó trong google như tôi, anh ta nên biết rằng các phương thức Date.getX không được dùng nữa.
tobi

38

Các lựa chọn rõ ràng để hiển thị thời gian là AnalogClock Chế độ xemDigitalClockChế độ xem .

Ví dụ: bố cục sau:

<?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>

Trông như thế này:

ảnh chụp màn hình


4
Thưa ông, tôi muốn hiển thị thời gian hiện tại bằng cách sử dụng setText.
BIBEKRebarAL

5
Tôi cảm thấy như một thằng ngu ngốc sau khi đọc câu trả lời rõ ràng này! Tôi đã triển khai khả năng chạy của riêng mình, đặt nó vào trạng thái ngủ trong một khoảng thời gian nhất định và cứ thế khi câu trả lời rõ ràng là một XML-one-liner! Rất cám ơn (hơn một năm sau bài đăng của bạn) :-)
dbm

6
Trong năm 2015, điều đó không được chấp nhận và bạn nên sử dụng TextClock thay thế. :)
Evilripper 27/2/2015

1
AnalogClock không được dùng ở cấp độ API 23. và AnalogClock và DigitalClock chỉ hiển thị thời gian hiện tại chứ không hiển thị ngày hiện tại.
Zafer

34

Trong trường hợp bạn muốn một dòng mã:

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

Kết quả là "2016-09-25 16:50:34"


23

Giải pháp làm việc của riêng tôi:

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

Hi vọng điêu nay co ich!


Tôi tự hỏi tại sao c.get (Lịch.MONTH) trả về 5 khi được cho là 6? Thiết bị của tôi có cài đặt thời gian chính xác.
Kris

Ồ vâng, nhưng tại sao họ phải làm điều đó khi các biến khác là chính xác. :)
Kris

1
Lịch c = Lịch.getInstance (); int tháng = c.get (Lịch.MONTH) + 1; Chuỗi sDate = tháng + "-" + c.get (Lịch.DAY_OF_MONTH) + "-" + c.get (Lịch.YEAR) + "-" + c.get (Lịch.HOUR_OF_DAY) + ":" + c. lấy (Lịch.MINUTE); hoạt động tốt
user577732

20

Nếu bạn muốn lấy ngày và giờ theo một mẫu cụ thể, bạn có thể sử dụng

Date d = new Date();
CharSequence s = DateFormat.format("yyyy-MM-dd hh:mm:ss", d.getTime());

15

Từ Làm thế nào để có được ngày đầy đủ với định dạng chính xác?:

Vui lòng sử dụng

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

để có được các định dạng thời gian và ngày hợp lệ theo nghĩa của cài đặt người dùng hiện tại (ví dụ định dạng 12/24).

import android.text.format.DateFormat;

private void some() {
    final Calendar t = Calendar.getInstance();
    textView.setText(DateFormat.getTimeFormat(this/*Context*/).format(t.getTime()));
}

10

Đây là mã làm việc cho tôi. Hãy thử điều này. Đây là một phương pháp đơn giản cần thời gian và ngày từ một cuộc gọi hệ thống. Phương thức Datetime () bất cứ nơi nào bạn cần.

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

9

Sử dụng:

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

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

Sử dụng formattedDatenhư của bạn Stringđầy ngày.
Trong trường hợp của tôi:mDateButton.setText(formattedDate);


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

Điều này sẽ đưa ra định dạng thời gian ngày như 2010-05-24T18: 13: 00



6

Để hiển thị chức năng ngày hiện tại:

Calendar c = Calendar.getInstance();

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

Bạn phải muốn nhập

nhập java.text.SimpleDateFormat; nhập java.util.CalWiki;

Bạn phải muốn sử dụng

TextView Date;
Date = (TextView) findViewById(R.id.Date);

5

Điều này sẽ cung cấp cho ngày và thời gian hiện tại:

public String getCurrDate()
{
    String dt;
    Date cal = Calendar.getInstance().getTime();
    dt = cal.toLocaleString();
    return dt;
}

5

Đơn giản chỉ cần sao chép mã này và hy vọng nó hoạt động tốt cho bạn.

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss a");
String strDate = sdf.format(c.getTime());

3
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Toast.makeText(getApplicationContext(), currentDateandTime, Toast.LENGTH_SHORT).show();

3

Hãy thử mã dưới đây:

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

3

Bạn có thể thử cách này

Calendar calendar = Calendar.getInstance();
SimpleDateFormat mdformat = new SimpleDateFormat("HH:mm:ss");
String strDate = "Current Time : " + mdformat.format(calendar.getTime());

2

Nếu bạn muốn làm việc với ngày / giờ trong Android, tôi khuyên bạn nên sử dụng ThreeTenABP , đây là phiên bản của java.time.*gói (có sẵn bắt đầu từ API 26 trên Android) được cung cấp với Java 8 có sẵn để thay thế java.util.Datejava.util.Calendar.

LocalDate localDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
String date = localDate.format(formatter);
textView.setText(date);

1
Nói một cách dễ hiểu, tôi chắc chắn rằng bạn có ý đúng: java.time được tích hợp từ API Android cấp 26. ThreeTenABP là những gì bạn sử dụng để có được hầu như cùng chức năng ở các cấp API thấp hơn . Vì vậy, mã có thể làm việc ở cả mức thấp và cao.
Ole VV

2
Và vì câu hỏi là về hiển thị ngày và giờ , vì mục đích đó, người ta có thể sử dụng ví dụ ZonedDateTimethay vì LocalDateDateTimeFormatter.ofLocalizedDateTimethay vì ofLocalizedDate. Nếu không thì mã sẽ giống nhau.
Ole VV

1

Để hiển thị ngày và giờ hiện tại trên Textview

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

Kiểm tra toàn bộ Mã Android - Hiển thị ngày và giờ hiện tại trong Ví dụ về Android Studio với mã nguồn


0

Để có được Thời gian / Ngày hiện tại, chỉ cần sử dụng đoạn mã sau:

Để sử dụng Thời gian :

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

Để sử dụng Ngày :

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

và bạn tốt để đi.


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";
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.