Как я могу узнать текущую дату в Android?

Я написал следующий код

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

Но спрашивает меня параметр, мне нужна текущая дата в строковом формате,

как

28-Dec-2011

так что я могу установить более TextView,

объясните немного, если вы думаете, что что-то необходимо, я новичок в разработке Android.


person Chatar Veer Suthar    schedule 28.12.2011    source источник
comment
Хотя использование класса DateFormat было нормальным, когда этот вопрос задавали в 2011 году, этот класс и его подкласс SimpleDateFormat всегда были проблемными и теперь давно устарели. Я рекомендую вам не использовать их, а вместо этого изучить java.time, современную дату Java и time API.   -  person Ole V.V.    schedule 13.07.2019


Ответы (23)


Для форматирования можно использовать класс 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);
person Paresh Mayani    schedule 28.12.2011
comment
вы можете использовать метод System.currentTimeMillis () или класс Data вместо класса Calendar. Должно быть быстрее. stackoverflow .com / questions / 368094 / - person cjayem13; 31.08.2014
comment
Для этого требуется API 24! - person ueen; 05.06.2019
comment
К вашему сведению, ужасно неприятные классы даты и времени, такие как java.util.Date , java.util.Calendar и java.text.SimpleDateFormat теперь являются устаревшими, замененными java.time классы, встроенные в Java 8 и новее. См. Руководство от Oracle. - person Basil Bourque; 14.07.2019
comment
@ueen Импортируйте из пакета Java, а не из Android. - person Sadda Hussain; 24.08.2019
comment
Работает штраф? В настоящее время? (2020) - person luke cross; 21.05.2020

Его простой однострочный код для получения текущей даты в этом формате гггг-ММ-дд, вы можете использовать нужный вам формат:

String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
person Pratik Butani    schedule 29.03.2013
comment
Вы должны изменить его на: String currentDate = new SimpleDateFormat (dd-MM-yyyy, Locale.getDefault ()). Format (new Date ()); - person Bart Burg; 10.04.2014
comment
Ого, спасибо! Это сработало, хотя я считаю, что, возможно, выяснил, почему дата на моем виртуальном устройстве показывалась накануне, вероятно, потому, что дата на виртуальной машине была неправильной. При тестировании на реальном телефоне он творил чудеса. Так что спасибо @Pratik - person wesley franks; 01.11.2015

Это не имеет ничего общего с Android, поскольку он основан на Java, поэтому вы можете использовать

private String getDateTime() { 
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   return dateFormat.format(date); 
}
person Graham Smith    schedule 28.12.2011
comment
Есть ошибки, new Date () запрашивает аргументы, и вы инициализируете DateFormat с помощью SimpleDateFormat, также недопустимый - person Chatar Veer Suthar; 28.12.2011

попробуй это,

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);
person Lucifer    schedule 28.12.2011
comment
он говорит, что добавить аргументы в новую дату (длинный) - person Chatar Veer Suthar; 28.12.2011
comment
в new Date () он не может запрашивать длинный параметр. - person Lucifer; 28.12.2011
comment
Почему вы используете закрытые ключи, запускаете свой код в проекте Android, вы получаете результат? - person Chatar Veer Suthar; 28.12.2011
comment
пожалуйста, удалите это личное. да, я получаю вывод, я вижу ваше обсуждение. Я не знаю, почему у вас проблемы с очень простым вопросом. - person Lucifer; 28.12.2011

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

Сначала вам нужен экземпляр

person Marthyn Olthof    schedule 28.12.2011
comment
getDateInstance, не узнав этого - person Chatar Veer Suthar; 28.12.2011
comment
если вы посмотрите на java-документы, это должно быть docs.oracle.com/javase/6/docs/api/java/text/, java.util.Locale) - person Marthyn Olthof; 28.12.2011
comment
@Veer, если вы случайно импортировали android.text.format.DateFormat вместо java.text.DateFormat, getDateInstance () не будет распознан - person gcbound; 11.07.2013

Работает как шарм и преобразуется в String в качестве бонуса;)

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

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

// импортируем класс Date как java.util

person arshad shaikh    schedule 02.02.2016

Простая настройка решения Пареша:

Date date = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(date);
person cNgamba    schedule 09.02.2018

В приведенном ниже коде отображаются как время, так и дата.

Calendar cal = Calendar.getInstance();
cal.getTime().toString();
person Rajeswari Kotikalapudi    schedule 28.12.2011

Даю современный ответ.

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 с подпакетами.

Ссылки

person Ole V.V.    schedule 13.07.2019
comment
Очень хороший ответ! Но как я могу преобразовать ThreeTen LocalDateTime в Date? Я использую Firebase, и предварительным условием для сохранения отметки времени является объект Date. - person H.Karatsanov; 03.07.2020
comment
@ H.Karatsanov При использовании бэкпорта: DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). При использовании встроенного java.time: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). См. Преобразование между java.time.LocalDateTime и java.util.Date. Здесь есть авторитетный ответ JodaStephen, а также ответ, показывающий использование backport. - person Ole V.V.; 04.07.2020

Вы можете использовать следующий код, чтобы получить дату в желаемом формате.

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));
person Android Dev    schedule 05.05.2017
comment
Хороший лайнер и работает на нижних SDK. На несколько символов короче DateFormat.format (dd-MM-yyyy, new java.util.Date ()). ToString () - person Jeffrey; 17.08.2018

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

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

Это лучший ответ ...

person Fatima    schedule 26.09.2018

всего одна строка кода, чтобы получить простой формат даты:

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

вывод: 18 мая 2020

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

вывод: 18 мая 2020 г. 11:00:39

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

вывод: 11:00:39

Надеюсь, этого ответа достаточно, чтобы получить этот формат даты и времени ... :)

person vijay saini    schedule 18.05.2020
comment
Пожалуйста, не учите молодых пользоваться давно устаревшими и заведомо неприятными уроками SimpleDateFormat и DateFormat. По крайней мере, не как первый вариант. И не без оговорок. Сегодня у нас намного лучше java.time, современный API даты и времени Java, и его DateTimeFormatter. Да, вы можете использовать его на Android. Для более старых версий Android см. Как использовать ThreeTenABP в Android Project. - person Ole V.V.; 19.05.2020
comment
@ OleV.V. Можете ли вы объяснить, что такого ужасного в этом методе? Я новичок в android и java, и он делает именно то, что мне нужно, так что в нем такого хлопотного? - person d0rf47; 22.10.2020

Этот метод можно использовать для получения текущей даты из системы.

public static String getCurrentDateAndTime(){
    Date c = Calendar.getInstance().getTime();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
    String formattedDate = simpleDateFormat.format(c);
    return formattedDate;
}
person Kavindu Dissanayake    schedule 10.02.2021

Самый простой способ получить текущую дату в текущей локали (локаль устройства!):

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());
person Ivo Stoyanov    schedule 05.11.2014

попробуйте с помощью этой ссылки кода, это абсолютно правильный ответ для всех случаев по дате и времени. или настроить дату и время в соответствии с потребностями и требованиями приложения.

попробуйте по этой ссылке. попробуйте по этой ссылке

person Amitsharma    schedule 07.12.2016

Я написал приложение календаря, используя CalendarView, и это мой код:

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

Поле "календарь" - это мой CalendarView. Импорт:

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

Текущая дата без ошибок.

person Muskovets    schedule 11.01.2017

Это код, который я использовал:

             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);
person Savita Sharma    schedule 06.06.2017

Я уже использовал это:

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), затем я использую формат, чтобы изменить дату на строку.

person Farshid Ahmadi    schedule 19.06.2018

В Котлине

https://www.programiz.com/kotlin-programming/examples/current-date-time

fun main(args: Array<String>) {

val current = LocalDateTime.now()

val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")
val formatted = current.format(formatter)

println("Current Date and Time is: $formatted")}
person creativecoder    schedule 04.11.2020

если вы просто хотите получить дату, просто введите такой код

Calendar.getInstance().getTime();
person Vanya Rachel    schedule 11.05.2021

Это код, который я использовал:

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);
person dondondon    schedule 15.10.2015

person    schedule
comment
Вносит ли это что-то существенное в ответ на вопрос (Мне нужна текущая дата в строковом формате, например 28-Dec-2011), чего еще нет в других ответах? В любом случае он все еще использует заведомо проблемный и давно устаревший класс SimpleDateFormat. Пожалуйста, для этого нам больше не нужны ответы. - person Ole V.V.; 13.07.2019
comment
это работает для лучшей практики добавить второй параметр locale SimpleDateFormat simpleDateFormat = new SimpleDateFormat (yyyy / MM / dd, Locale.ENGLISH); - person Rucha Bhatt Joshi; 22.04.2020