Как вы форматируете дату и время в Android?

Как вы правильно отформатируете в соответствии с конфигурацией устройства дату и время, когда у вас есть год, месяц, день, час и минута?

Используйте стандартный class Java DateFormat.

Например, чтобы отобразить текущую дату и время, выполните следующие действия:

Date date = new Date(location.getTime()); DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); mTimeText.setText("Time: " + dateFormat.format(date)); 

Вы можете инициализировать объект Date своими собственными значениями, однако вы должны знать, что конструкторы устарели, и вы действительно должны использовать объект Java Calendar.

На мой взгляд, android.text.format.DateFormat.getDateFormat(context) заставляет меня запутаться, потому что этот метод возвращает java.text.DateFormat а не android.text.format.DateFormat – – “.

Итак, я использую код fragmentа, как показано ниже, чтобы получить текущую дату / время в моем формате.

 android.text.format.DateFormat df = new android.text.format.DateFormat(); df.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date()); or android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date()); 

Кроме того, вы можете использовать другие форматы. Следуйте за DateFormat .

Вы можете использовать DateFormat . Результат зависит от языка Locale по умолчанию, но вы также можете указать Locale:

https://developer.android.com/reference/java/text/DateFormat.html

Это результаты на телефоне во французском языке:

 DateFormat.getDateInstance().format(date) 

==> 3 ноя 2017

 DateFormat.getDateInstance(DateFormat.SHORT).format(date) 

==> 03/11/2017

 DateFormat.getDateInstance(DateFormat.MEDIUM).format(date) 

==> 3 нов. 2017

 DateFormat.getDateInstance(DateFormat.LONG).format(date) 

==> 3 ноября 2017

 DateFormat.getDateInstance(DateFormat.FULL).format(date) 

==> vendredi 3 ноября 2017

 DateFormat.getDateTimeInstance().format(date) 

==> 3 нов. 2017 16:04:58

 DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date) 

==> 03/11/2017 16:04

 DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date) 

==> 03/11/2017 16:04:58

 DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date) 

==> 03/11/2017 16:04:58 GMT + 01: 00

 DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date) 

==> 03/11/2017 16:04:58 heure normale d’Europe centrale

 DateFormat.getTimeInstance().format(date) 

=== 16:04:58

 DateFormat.getTimeInstance(DateFormat.SHORT).format(date) 

=== 16:04

 DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date) 

=== 16:04:58

 DateFormat.getTimeInstance(DateFormat.LONG).format(date) 

==> 16:04:58 GMT + 01: 00

 DateFormat.getTimeInstance(DateFormat.FULL).format(date) 

==> 16:04:58 heure normale d’Europe centrale

Дата для строки даты локали:

 Date date = new Date(); String stringDate = DateFormat.getDateTimeInstance().format(date); 

Опции:

  DateFormat.getDateInstance() 

-> 31 декабря 1969 года

  DateFormat.getDateTimeInstance() 

-> 31 декабря 1969 года 16:00:00

  DateFormat.getTimeInstance() 

-> 4:00:00 PM

Это сделает это:

 Date date = new Date(); java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); mTimeText.setText("Time: " + dateFormat.format(date)); 

Следуя этому: http://developer.android.com/reference/android/text/format/Time.html

Лучше использовать родной язык Android. Класс времени:

 Time now = new Time(); now.setToNow(); 

Затем формат:

 Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S")); 

Использовать SimpleDateFormat

Как это:

 event.putExtra("starttime", "12/18/2012"); SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); Date date = format.parse(bundle.getString("starttime")); 

Используйте эти два как переменные classа:

  public java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); private Calendar mDate = null; 

И используйте его вот так:

  mDate = Calendar.getInstance(); mDate.set(year,months,day); dateFormat.format(mDate.getTime()); 

Это мой метод, вы можете определять и вводить и выводить формат.

 public static String formattedDateFromString(String inputFormat, String outputFormat, String inputDate){ if(inputFormat.equals("")){ // if inputFormat = "", set a default input format. inputFormat = "yyyy-MM-dd hh:mm:ss"; } if(outputFormat.equals("")){ outputFormat = "EEEE d 'de' MMMM 'del' yyyy"; // if inputFormat = "", set a default output format. } Date parsed = null; String outputDate = ""; SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, java.util.Locale.getDefault()); SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, java.util.Locale.getDefault()); // You can set a different Locale, This example set a locale of Country Mexico. //SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, new Locale("es", "MX")); //SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, new Locale("es", "MX")); try { parsed = df_input.parse(inputDate); outputDate = df_output.format(parsed); } catch (Exception e) { Log.e("formattedDateFromString", "Exception in formateDateFromstring(): " + e.getMessage()); } return outputDate; } 

Используйте сборку в classе времени!

 Time time = new Time(); time.set(0, 0, 17, 4, 5, 1999); Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S")); 

SimpleDateFormat

Я использую SimpleDateFormat без специального шаблона, чтобы получить фактическую дату и время из системы в предварительно выбранном формате устройства:

 public static String getFormattedDate() { //SimpleDateFormat called without pattern return new SimpleDateFormat().format(Calendar.getInstance().getTime()); } 

возвращает :

  • 13.01.15 11:45
  • 1/13/15 10:45

Этот код вернет текущую дату и время:

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

Другие ответы, как правило, правильны. Я хотел бы внести современный ответ. Классы Date , DateFormat и SimpleDateFormat используемые в большинстве других ответов, давно устарели и вызвали проблемы для многих программистов на протяжении многих лет. Сегодня у нас намного лучше в java.time , AKA JSR-310, современном Java-интерфейсе даты и времени. Можете ли вы использовать это на Android еще? Несомненно! Современные classы были отправлены на Android в проект ThreeTenABP. См. Этот вопрос: как использовать ThreeTenABP в Android Project для всех деталей.

Этот fragment должен начать работу:

  int year = 2017, month = 9, day = 28, hour = 22, minute = 45; LocalDateTime dateTime = LocalDateTime.of(year, month, day, hour, minute); DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); System.out.println(dateTime.format(formatter)); 

Когда я задал предпочитаемый язык моего компьютера английскому или английскому английскому, это печатает:

 Sep 28, 2017 10:45:00 PM 

Когда вместо этого я назначил его датскому, я получаю:

 28-09-2017 22:45:00 

Таким образом, он выполняет настройку. Я точно не знаю, насколько подробно он соответствует настройкам даты и времени вашего устройства, и это может отличаться от телефона к телефону.

Пытаться:

 event.putExtra("startTime", "10/05/2012"); 

И когда вы получаете доступ к переданным переменным:

 SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); Date date = formatter.parse(bundle.getString("startTime")); 

Я использую его так:

 public class DateUtils { static DateUtils instance; private final DateFormat dateFormat; private final DateFormat timeFormat; private DateUtils() { dateFormat = android.text.format.DateFormat.getDateFormat(MainApplication.context); timeFormat = android.text.format.DateFormat.getTimeFormat(MainApplication.context); } public static DateUtils getInstance() { if (instance == null) { instance = new DateUtils(); } return instance; } public synchronized static String formatDateTime(long timestamp) { long milliseconds = timestamp * 1000; Date dateTime = new Date(milliseconds); String date = getInstance().dateFormat.format(dateTime); String time = getInstance().timeFormat.format(dateTime); return date + " " + time; } } 

Этот код работает для меня!

 Date d = new Date(); CharSequence s = android.text.format.DateFormat.format("MM-dd-yy hh-mm-ss",d.getTime()); Toast.makeText(this,s.toString(),Toast.LENGTH_SHORT).show(); 

Избегайте juDate

Java.util.Date и .Calendar и SimpleDateFormat на Java (и Android), как известно, являются неприятными. Избежать их. Они настолько плохи, что Sun / Oracle отказались от них, вытеснив их новым пакетом java.time в Java 8 (не в Android от 2014 года). Новый java.time был вдохновлен библиотекой Joda-Time .

Joda времени

Joda-Time работает в Android.

Найдите StackOverflow для «Joda», чтобы найти много примеров и много дискуссий.

Это лакомый кусок исходного кода с использованием Joda-Time 2.4.

Стандартный формат.

 String output = DateTime.now().toString(); // Current date-time in user's default time zone with a String representation formatted to the ISO 8601 standard. 

Локализованный формат.

 String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() ); // Full (long) format localized for this user's language and culture. 

Вернуться к 2016, Когда я хочу настроить формат (не в соответствии с конфигурацией устройства, как вы просите …) Обычно я использую файл строкового ресурса:

в strings.xml:

 %1$td/%1$tm/%1$tY 

В работе:

 Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date())); 

Это также полезно при выпуске новой библиотеки привязки даты .

Таким образом, я могу иметь что-то подобное в файле макета:

  

И в classе java:

  MovieDetailViewModel vm = new MovieDetailViewModel(); vm.setReleaseDate(new Date()); 

Класс android Time предоставляет 3 способа форматирования http://developer.android.com/reference/android/text/format/Time.html

Вот как я это сделал:

 /** * This method will format the data from the android Time class (eg. myTime.setToNow()) into the format * Date: dd.mm.yy Time: hh.mm.ss */ private String formatTime(String time) { String fullTime= ""; String[] sa = new String[2]; if(time.length()>1) { Time t = new Time(Time.getCurrentTimezone()); t.parse(time); // or t.setToNow(); String formattedTime = t.format("%d.%m.%Y %H.%M.%S"); int x = 0; for(String s : formattedTime.split("\\s",2)) { System.out.println("Value = " + s); sa[x] = s; x++; } fullTime = "Date: " + sa[0] + " Time: " + sa[1]; } else{ fullTime = "No time data"; } return fullTime; } 

Надеюсь, что это поможет 🙂

Это слишком поздно, но это может помочь кому-то

 DateFormat.format(format, timeInMillis); 

вот format – какой формат вам нужен

ex: «ЧЧ: мм» возвращается 15:30

место действия

Чтобы получить дату или время в формате локали с миллисекунд, я использовал это:

Дата и время

 Date date = new Date(milliseconds); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault()); dateFormat.format(date); 

Дата

 Date date = new Date(milliseconds); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault()); dateFormat.format(date); 

Время

 Date date = new Date(milliseconds); DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault()); dateFormat.format(date); 

Вы можете использовать другой стиль и стиль даты. Подробнее о стилях здесь .

Давайте будем гением компьютера.