Месяц без ведущих нулей в Android - PullRequest
10 голосов
/ 30 декабря 2011

Есть ли способ отформатировать месяц без начальных нулей в Java / Android?

Я получил это:

mTitleText.setText(String.format("Pick Date Time: %tm/%te/%tY %tk:%02d",
                mTime,mTime,mTime,mTime,minute)); 

И он возвращается 02.12.2012 13:23, когда я хочу, чтобы он вернулся 2.12.2012 13: 23.

Ответы [ 5 ]

24 голосов
/ 24 января 2013

Для тех, кто хочет избежать длинных JavaDocs :

Date mTime = new Date();  
String text = new SimpleDateFormat("M/d/yyyy hh:mm").format(mTime);

Использование M вместо MM и d вместо dd будет отображать день месяца и месяца без начальных нулей, если это возможно.

1 голос
/ 03 апреля 2018

Используя Java 8 DateTimeFormatter , этого можно достичь, используя одиночные символы вместо пар, используемых для обозначения каждого дня, месяца, часа, минут и секунд.

"гггг / м / д Ч: м: с" разрешит анализ даты и времени без дополнения нулями.

"гггг / мм / дд ЧЧ: мм: сс" требует (ожидает) заполнения нулями, иначе будет выдано DateTimeParseException .

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

//start class and method scope
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/M/d H:m");
LocalDateTime.parse(stringToBeParsed, formatter);
} catch (DateTimeParseException e) {
//Log error in parsing, exit program, abort current execution, return null response for API call, shutdown system, whatever.
}
//end class and method scope
1 голос
/ 30 декабря 2011

Вместо использования String.format(), вы можете использовать класс SimpleDateFormat?Он будет делать то, что вы хотите, но не видя больше вашего кода, я не могу сказать, есть ли у вас объект Date или Calendar, который вы можете использовать.

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

0 голосов
/ 06 июля 2018

SimpleDateFormat это хорошо, но вы также можете сделать это так:

mTitleText.setText(String.format("Pick Date Time: %s/%1$te/%$1tY %$1tk:%02d", mTime.getMonth()+1,mTime,minute));

0 голосов
/ 02 октября 2016

ТЛ; др

ZonedDateTime.now()
             .format( DateTimeFormatter.ofPattern( "M/d/uuuu HH:mm" ) )

java.time

Современный способ заключается в использовании классов java.time, которые вытесняют проблемные старые унаследованные классы даты и времени.

В классе DateTimeFormatter определите шаблон форматирования, используя односимвольные коды для месяца и / или дня месяца, а не двухсимвольные коды.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "M/d/uuuu HH:mm" );

Получить текущий момент.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( z );

Создать строку.

String output = zdt.format( f )

О java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые классы даты и времени, такие как java.util.Date, .Calendar и & java.text.SimpleDateFormat.

Проект Joda-Time , который сейчас находится в режиме обслуживания , рекомендует перейти на java.time.

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений.

Большая часть функций java.time перенесена в Java 6 & 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP (см. Как пользоваться… ).

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

...