Как я могу получить текущую дату в Android?


165

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

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

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

лайк

28-Dec-2011

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

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


1
Хотя использование DateFormatкласса было нормальным, когда этот вопрос был задан в 2011 году, этот класс и его подкласс SimpleDateFormatвсегда были хлопотными и теперь уже давно устарели. Я рекомендую вам не использовать их и вместо этого заглянуть в java.time, современный 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 () или класс Data вместо класса Calendar. Должно быть быстрее. stackoverflow.com/questions/368094/…
cjayem13

Это требует API 24!
19

К вашему сведению, ужасно проблемные классы даты и времени, такие как java.util.Date, java.util.Calendarи java.text.SimpleDateFormatтеперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и более поздние версии . Смотрите Учебник по Oracle .
Василий Бурк

@ueen Пожалуйста, импортируйте из пакета Java, а не из Android.
Садда Хуссейн

Работает штрафы? В настоящее время? (2020)
Люк Кросс

152

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

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

7
Вы должны изменить его на: String currentDate = new SimpleDateFormat ("dd-MM-гггг", Locale.getDefault ()). Format (new Date ());
Барт Бург

1
Вау, спасибо! Это сработало, хотя я полагаю, что, возможно, выяснил, почему дата на моем виртуальном устройстве отображалась за день до этого, возможно потому, что дата на виртуальной машине была неправильной. При тестировании на реальном телефоне он творил чудеса. Так что спасибо @Pratik
Уэсли Фрэнкс

30

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

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

Есть ошибки, new Date () запрашивает аргументы, и вы инициализируете DateFormat с SimpleDateFormat, также недопустимым
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

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

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

это говорит добавить аргументы к новой дате (долго)
Chatar Veer Suthar

в новом Date () он не может задать длинный параметр.
Люцифер

Почему вы используете закрытую клавиатуру, запускаете свой код в 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)
Мартын Олтоф,

@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 в Date? Я использую 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, а также ответ, показывающий использование backport .
Оле В.В.

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 = new SimpleDateFormat ("гггг / мм / дд", Locale.ENGLISH);
Руча Бхатт Джоши

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

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

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

Хороший лайнер и работает на нижних СДКС. Несколько символов короче DateFormat.format ("dd-MM-гггг", новый 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());

Поле 'calendar' - это мой 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.