Làm cách nào tôi có thể có được ngày hiện tại trong Android?


165

Tôi đã viết đoạn mã sau

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

Nhưng đang hỏi tôi tham số, tôi muốn ngày hiện tại ở định dạng chuỗi,

giống

28-Dec-2011

để tôi có thể thiết lập TextView,

giải thích một chút, nếu bạn nghĩ điều gì đó là cần thiết, tôi chưa quen với Phát triển Android.


1
Mặc dù sử dụng DateFormatlớp này vẫn ổn khi câu hỏi này được hỏi vào năm 2011, nhưng lớp đó và lớp con của nó SimpleDateFormatluôn gây rắc rối và giờ đã lỗi thời. Tôi khuyên bạn không nên sử dụng chúng và thay vào đó hãy tìm hiểu về java.time, API ngày và giờ Java hiện đại .
Ole VV

Câu trả lời:


389

Bạn có thể sử dụng SimpleDateFormatlớp để định dạng ngày theo định dạng mong muốn của bạn.

Chỉ cần kiểm tra liên kết này, nơi bạn có một ý tưởng cho ví dụ của bạn.

Ví dụ:

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

Cập nhật:

Ví dụ chi tiết ở đây , tôi muốn đề nghị bạn xem qua ví dụ này và hiểu khái niệm về lớp SimpleDateFormat.

Giải pháp cuối cùng:

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

bạn có thể muốn sử dụng phương thức System.cienTimeMillis () hoặc lớp Dữ liệu thay vì lớp Lịch. Nên nhanh hơn. stackoverflow.com/questions/368094/
Mạnh

Điều này đòi hỏi API 24!
ueen

FYI, các lớp học ngày thời gian khủng khiếp phiền hà như java.util.Date, java.util.Calendarjava.text.SimpleDateFormatbây giờ là di sản , thay thế bởi sự java.time class built vào Java 8 và sau đó. Xem Hướng dẫn của Oracle .
Basil Bourque

@ueen Vui lòng nhập từ gói java không phải từ Android.
Sadda Hussain

Công trình phạt tiền? Hiện tại? (2020)
luke vượt qua

152

một dòng đơn giản của nó để có được Ngày hiện tại ở định dạng yyyy-MM-dd này, bạn có thể sử dụng định dạng của mình mà bạn muốn:

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

7
Bạn nên thay đổi nó thành: String currentDate = new SimpleDateFormat ("dd-MM-yyyy", Locale.getDefault ()). Format (new Date ());
Bart Burg

1
Ồ, cảm ơn bạn! Điều này đã hoạt động, mặc dù tôi tin rằng tôi có thể đã tìm ra lý do tại sao ngày trên thiết bị ảo của tôi hiển thị một ngày trước đó, có lẽ vì ngày trên máy ảo không đúng. Khi thử nghiệm trên một chiếc điện thoại thực tế, nó đã làm việc kỳ diệu. Vì vậy, cảm ơn bạn @Pratik
wesley franks

30

Điều này không có gì để làm với Android vì nó dựa trên java để bạn có thể sử dụng

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

Có lỗi, ngày mới () đang yêu cầu đối số và bạn đang khởi tạo DateFormat bằng SimpleDateFormat, cũng không hợp lệ
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

thử cái này,

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

nó đang nói thêm đối số vào Ngày mới (dài)
Chatar Veer Suthar

trong Ngày mới (), nó không thể yêu cầu tham số dài.
Lucifer

Tại sao bạn sử dụng keywork riêng, chạy mã của bạn trong dự án Android, bạn có nhận được đầu ra không?
Chatar Veer Suthar

vui lòng xóa "riêng tư". vâng tôi nhận được đầu ra, tôi đang xem cuộc thảo luận của bạn. Tôi không biết tại sao bạn lại gặp vấn đề với câu hỏi rất đơn giản.
Lucifer

7
CharSequence s  = DateFormat.getDateInstance().format("MMMM d, yyyy ");

Bạn cần một ví dụ đầu tiên


getDateInstance, không nhận ra điều này
Chatar Veer Suthar

nếu bạn nhìn vào các tài liệu java thì nó phải là, docs.oracle.com/javase/6/docs/api/java/text/ trộm , java.util.Locale)
Marthyn Olthof

@Veer, nếu bạn vô tình nhập android.text.format.DateFormat thay vì java.text.DateFormat, getDateInstance () sẽ không được nhận ra
gc gửi

7

Hoạt động như một bùa mê và chuyển đổi thành Chuỗi như một phần thưởng;)

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

// nhập lớp ngày dưới dạng java.util


4

Mã dưới đây hiển thị cả thời gian và ngày

Calendar cal = Calendar.getInstance();
cal.getTime().toString();

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

4

Tôi đang cung cấp câu trả lời hiện đại.

java.time và ThreeTenABP

Để có được ngày hiện tại:

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

Điều này cung cấp cho bạn một LocalDateđối tượng, đó là những gì bạn nên sử dụng để giữ một ngày trong chương trình của bạn. A LocalDatelà một ngày không có thời gian trong ngày.

Chỉ khi bạn cần hiển thị ngày cho người dùng, hãy định dạng nó thành một chuỗi phù hợp với ngôn ngữ của người dùng:

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

Khi tôi chạy đoạn trích này ngày hôm nay bằng ngôn ngữ tiếng Anh Mỹ, đầu ra là:

Ngày 13 tháng 7 năm 2019

Nếu bạn muốn nó ngắn hơn, chỉ định FormatStyle.MEDIUMhoặc thậm chí FormatStyle.SHORT. DateTimeFormatter.ofLocalizedDatesử dụng ngôn ngữ định dạng mặc định, vì vậy vấn đề là nó sẽ cho đầu ra phù hợp với miền địa phương đó, khác nhau cho các địa phương khác nhau.

Nếu người dùng của bạn có các yêu cầu rất đặc biệt đối với định dạng đầu ra, hãy sử dụng chuỗi mẫu định dạng:

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

13-يول -2019

Tôi đang sử dụng và giới thiệu java.time, API ngày và giờ Java hiện đại. DateFormat, SimpleDateFormat, DateCalendarsử dụng trong câu hỏi và / hoặc nhiều câu trả lời khác, được thiết kế kém và lâu lỗi thời. Và java.time đẹp hơn rất nhiều để làm việc với.

Câu hỏi: Tôi có thể sử dụng java.time trên Android không?

Có, java.time hoạt động độc đáo trên các thiết bị Android cũ hơn và mới hơn. Nó chỉ cần ít nhất Java 6 .

  • Trong Java 8 trở lên và trên các thiết bị Android mới hơn (từ API cấp 26), API hiện đại được tích hợp sẵn.
  • Trong Java 6 và 7, lấy ThreeTen Backport, backport của các lớp hiện đại (ThreeTen cho JSR 310; xem các liên kết ở phía dưới).
  • Trên (cũ) Android sử dụng phiên bản Android của ThreeTen Backport. Nó được gọi là ThreeTenABP. Và hãy chắc chắn rằng bạn nhập các lớp ngày và thời gian từ org.threeten.bpvới các gói con.

Liên kết


Câu trả lời rất hay! Nhưng làm cách nào tôi có thể chuyển đổi ThreeTen LocalDateTime thành ngày? Tôi đang sử dụng Firebase và điều kiện tiên quyết để lưu dấu thời gian là đối tượng Date.
H.Karatsanov

@ H.Karatsanov Nếu sử dụng backport : DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Nếu sử dụng java.time tích hợp : Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Xem phần Chuyển đổi giữa java.time.LocalDateTime và java.util.Date . Câu trả lời có thẩm quyền của JodaStephen là có, và cũng là một câu trả lời cho thấy việc sử dụng backport .
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();

Có phải nó đóng góp bất cứ điều gì đáng kể cho câu hỏi ( tôi muốn ngày hiện tại ở định dạng chuỗi, như28-Dec-2011 ) không có trong các câu trả lời khác? Trong mọi trường hợp, nó vẫn đang sử dụng SimpleDateFormatlớp lỗi thời nổi tiếng và rắc rối . Xin vui lòng, chúng tôi không cần thêm câu trả lời làm điều đó.
Ole VV

nó hoạt động để thực hành tốt nhất thêm tham số thứ hai locale SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy / MM / dd", Locale.ENG setup);
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

Một điều chỉnh đơn giản cho giải pháp của Paresh:

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

Bạn có thể sử dụng mã sau đây để có được một ngày ở định dạng bạn muốn.

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

Đẹp một lót và hoạt động trên Sdks thấp hơn. Một vài ký tự ngắn hơn DateFormat.format ("dd-MM-yyyy", 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);

Đây là câu trả lời hay nhất ...


0

Cách đơn giản nhất để có được ngày hiện tại trong ngôn ngữ hiện tại (ngôn ngữ thiết bị!):

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

Nếu bạn muốn có ngày theo các phong cách khác nhau, hãy sử dụng getDateInstance(int style):

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

Phong cách khác: DateFormat.LONG, DateFormat.DATE_FIELD, DateFormat.DAY_OF_YEAR_FIELD, vv (sử dụngCTRL+Space để xem tất cả trong số họ)

Nếu bạn cũng cần thời gian:

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

Hãy thử với liên kết mã này, đây là câu trả lời chính xác tuyệt đối cho tất cả các trường hợp theo ngày và thời gian. hoặc tùy chỉnh ngày và giờ theo nhu cầu và yêu cầu của ứng dụng.

thử với liên kết này. thử với liên kết này


0

Tôi đã viết ứng dụng lịch bằng Lịch và đó là mã của tôi:

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

Trường 'lịch' là Lịch Xem của tôi. Nhập khẩu:

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

Tôi đã có ngày hiện tại mà không có lỗi.


0

Đây là mã tôi đã sử dụng:

             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

Tôi đã sử dụng cái này:

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

Lúc đầu tôi có thời gian, sau đó tôi đã khai báo Định dạng ngày đơn giản (để lấy ngày như: 19-6-2018) sau đó tôi sử dụng định dạng để thay đổi ngày thành chuỗi.


0

chỉ cần một mã dòng để có được định dạng Ngày đơn giản:

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

sản lượng: 18 tháng 5 năm 2020

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

sản lượng: 18-tháng 5 năm 2020 11:00:39 sáng

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

đầu ra: 11:00:39 sáng

Hy vọng câu trả lời này là đủ để có được Định dạng Ngày và Giờ này ... :)


Xin đừng dạy các bạn trẻ sử dụng các lớp học SimpleDateFormatDateFormatlớp học lỗi thời và lỗi thời . Ít nhất không phải là lựa chọn đầu tiên. Và không phải không có bất kỳ đặt phòng. Ngày nay chúng ta có rất nhiều thứ tốt hơn java.time, API ngày và thời gian hiện đại của Java và của nó DateTimeFormatter. Có, bạn có thể sử dụng nó trên Android. Đối với Android cũ hơn, hãy xem Cách sử dụng ThreeTenABP trong Dự án Android .
Ole VV

-1

Đây là mã tôi đã sử dụng :

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