Як я можу отримати поточну дату в Android?


165

Я написав наступний код

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

Але задає мені параметр, я хочу, щоб поточна дата була у рядковому форматі,

подібно до

28-Dec-2011

щоб я міг перестати TextView,

поясніть трохи, якщо ви вважаєте, що щось потрібно, я новачок в Android Development.


1
Хоча з використанням DateFormatкласу було нормально, коли це запитання було задано у 2011 році, цей клас та його підклас SimpleDateFormatзавжди були клопітними та тепер давно застаріли. Я рекомендую не використовувати їх, а замість цього заглянути в java.time, сучасний API дати та часу Java .
Оле ВВ

Відповіді:


389

Ви можете використовувати SimpleDateFormatклас для форматування дати у бажаному форматі.

Просто перевірте це посилання, де ви знайдете ідею для свого прикладу.

Наприклад:

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

Оновлення:

Детальний приклад тут , я б запропонував вам пройти цей приклад і зрозуміти поняття класу SimpleDateFormat.

Остаточне рішення:

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

ви можете використовувати метод System.currentTimeMillis () або клас даних замість класу Календар. Повинен бути швидшим. stackoverflow.com/questions/368094 / ...
cjayem13

Для цього потрібен API 24!
королева

FYI, жахливі класи, які датують час, такі як java.util.Date, java.util.Calendarі java.text.SimpleDateFormatзараз є застарілими , витіснені класами java.time, вбудованими в Java 8 та новіших версій. Дивіться Підручник від Oracle .
Василь Бурк

@ueen Будь ласка, імпортуйте з пакета java, а не з Android.
Садда

Працює штраф? В даний час? (2020)
luke cross

152

Його простий однорядковий код для отримання поточної дати у цьому форматі " yyyy-MM-dd ", ви можете використовувати потрібний формат:

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

7
Ви повинні змінити його на: String currentDate = новий SimpleDateFormat ("dd-MM-yyyy", Locale.getDefault ()). Формат (новий Date ());
Барт-Бургас

1
Нічого, дякую! Це спрацювало, хоча я вважаю, що, можливо, я дізнався, чому дата на моєму віртуальному пристрої відображалася за день до цього, мабуть, тому, що дата на віртуальній машині була неправильною. Під час тестування на фактичному телефоні він творив чудеса. Так що спасибі @Pratik
Wesley франки

30

Це не має нічого спільного з андроїдом, оскільки він базується на Java, щоб ви могли використовувати його

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

Є помилки, новий Date () запитує аргументи, і ви ініціалізуєте DateFormat з SimpleDateFormat, також не
вірно

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

11

спробуйте це,

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

це говорить, додайте аргументи до нової дати (довго)
Chatar Veer Suthar

у новому Date (), він не може задавати параметр long.
Люцифер

Чому ви, використовуючи приватну ключову роботу, запускаєте свій код в проекті Android, отримуєте результат?
Chatar Veer Suthar

видаліть цю "приватну". так, я отримую результат, я бачу вашу дискусію. Я не знаю, чому у вас виникають проблеми з дуже простою запитом.
Люцифер

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

Спочатку вам потрібен екземпляр


getDateInstance, не визнаючи цього
Chatar Veer Suthar

якщо ви подивитеся на документи java, це повинно бути, docs.oracle.com/javase/6/docs/api/java/text/… , java.util.Locale)
Marthyn Olthof

@Veer, якщо ви випадково імпортували android.text.format.DateFormat замість java.text.DateFormat, getDateInstance () не буде розпізнано
gcbound

7

Працює як шарм і перетворюється на String як бонус;)

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




4

Я даю сучасну відповідь.

java.time та ThreeTenABP

Щоб отримати поточну дату:

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

Це дає вам LocalDateоб'єкт, який ви повинні використовувати для збереження дати у вашій програмі. А LocalDate- дата без часу доби.

Тільки тоді, коли вам потрібно відобразити дату користувачеві, відформатуйте її у рядок, що підходить для мови користувача:

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

Коли я запустив цей фрагмент сьогодні англійською мовою в США, вихід:

13 липня 2019 року

Якщо ви хочете, щоб він був коротшим, вкажіть FormatStyle.MEDIUMабо навіть FormatStyle.SHORT. DateTimeFormatter.ofLocalizedDateвикористовує локальний формат за замовчуванням, тому справа полягає в тому, що він дасть вихід, відповідний для цієї мови, різний для різних мов.

Якщо ваш користувач має особливі вимоги до вихідного формату, використовуйте рядок шаблону формату:

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

13-євро -2019

Я використовую і рекомендую java.time, сучасний API дати та часу Java. DateFormat, SimpleDateFormat, DateІ Calendarвикористовується в питанні і / або багато інших відповіді, погано розроблені і давно застаріли. І з java.time так приємніше працювати.

Питання: Чи можна використовувати java.time на Android?

Так, java.time чудово працює на старих та новіших пристроях Android. Для цього просто потрібно принаймні Java 6 .

  • У Java 8 та новіших пристроях Android (від рівня API 26) вбудований сучасний API.
  • У Java 6 та 7 отримайте ThreeTen Backport, опору сучасних класів (ThreeTen для JSR 310; див. Посилання внизу).
  • На (старшому) Android використовують Android-версію ThreeTen Backport. Це називається ThreeTenABP. І переконайтесь, що ви імпортуєте дати та часові класи org.threeten.bpз підпакетів.

Посилання


Дуже гарна відповідь! Але як я можу конвертувати ThreeTen LocalDateTime в дату? Я використовую Firebase, і необхідною умовою для збереження часової позначки є об'єкт Date.
Х.Карацанов

@ H.Karatsanov При використанні Backport: DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). При використанні вбудованого в java.time: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Див. Розділ Перетворення між java.time.LocalDateTime та java.util.Date . Авторитетна відповідь JodaStephen є, а також відповідь, що показує використання резервного порту .
Оле ВВ

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

Чи сприяє це щось суттєве у питанні ( я хочу, щоб поточна дата в рядковому форматі, як28-Dec-2011 ), що вже не в інших відповідях? У будь-якому випадку, він все ще використовує горезвісно клопіткий і давно застарілий SimpleDateFormatклас. Будь ласка, нам більше не потрібні відповіді.
Оле ВВ

він працює для кращої практики додавання другого локального параметру SimpleDateFormat simpleDateFormat = новий SimpleDateFormat ("yyyy / 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

Просте налаштування рішення 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

Ви можете використовувати наступний код, щоб отримати дату у потрібному форматі.

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

Хороший один вкладиш і працює на нижчих Sdks. Кілька символів коротше DateFormat.format ("dd-MM-yyyy", новий java.util.Date ()). ToString ()
Джеффрі

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

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

Ця найкраща відповідь ...


0

Найпростіший спосіб отримати поточну дату в поточному мові (локалі пристрою!):

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

Якщо ви хочете мати дату в різних стилях, використовуйте getDateInstance(int style):

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

Інші стилі: DateFormat.LONG, DateFormat.DATE_FIELD, DateFormat.DAY_OF_YEAR_FIELDі т.д. (використання , CTRL+Spaceщоб побачити їх все)

Якщо вам також потрібен час:

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

спробуйте за цим посиланням коду, це абсолютна правильна відповідь для всіх випадків протягом усієї дати та часу. або налаштувати дату та час відповідно до потреб та вимог програми.

спробуйте за цим посиланням. спробуйте за цим посиланням


0

Я написав додаток для календаря за допомогою CalendarView, і це мій код:

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

поле "календар" - це мій CalendarView. Імпорт:

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

У мене поточна дата без помилок.


0

Це код, який я використав:

             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

Я вже користувався цим:

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

спочатку я отримую час, потім я оголосив простий формат дати (щоб отримати дату на зразок: 19-6-2018), потім використовую формат, щоб змінити дату на рядок.


0

лише один код рядка, щоб отримати простий формат дати:

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

вихід: 18 травня-2020

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

вихід: 18 травня-2020 11:00:39

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

вихід: 11:00:39

Сподіваюся, що цієї відповіді достатньо, щоб отримати цей формат дати та часу ... :)


Будь ласка, не вчіть молодих людей використовувати давно застарілі та горезвісні клопітки SimpleDateFormatта DateFormatзаняття. Принаймні, не як перший варіант. І не без жодного застереження. Сьогодні ми набагато краще java.timeвживаємо сучасний API дати та часу Java та його DateTimeFormatter. Так, ви можете використовувати його на Android. Для старих Android див. Як використовувати ThreeTenABP в Android Project .
Оле В. В.

-1

Це код, який я використав :

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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.