Как получить месяц и день в Android? - PullRequest
3 голосов
/ 01 сентября 2011

Мне нужно получить месяц и день как: 01 для января, 02 для февраля ... и 01 для первого дня месяца и т. Д. ... Я пробовал это:

 String dd = c.get(Calendar.YEAR) + "-" 
        + c.get(Calendar.MONTH)
        + "-" + c.get(Calendar.DAY_OF_MONTH) 
        + " " + c.get(Calendar.HOUR_OF_DAY) 
        + ":" + c.get(Calendar.MINUTE)
        + ":" + c.get((Calendar.SECOND));

, но я получаюкак то так:

2011-8-1 12:05:20

Какое решение этой проблемы?В течение месяца я думаю, что я должен добавить 1, верно?

Ответы [ 5 ]

13 голосов
/ 01 сентября 2011
        String month=c.get(Calendar.MONTH)+1+"";
    if(month.length()<2){
         month="0"+month;   
    }  
11 голосов
/ 01 сентября 2011

Вы слишком усложняете проблему. Если все, что вам нужно, это отформатировать дату определенным образом, тогда используйте java.text.SimpleDateFormat class. Смотрите документацию здесь: http://developer.android.com/reference/java/text/SimpleDateFormat.html

Если вам действительно нужно получить отдельные детали, тогда вы правы в использовании метода Calendar.get. Я предлагаю вам прочитать на java.util.Calendar.

7 голосов
/ 01 сентября 2011
Date date = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
String formattedDate = format.format(date);
1 голос
/ 08 февраля 2015
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Log.e("TEST",sdf.format(new Date()));
0 голосов
/ 14 августа 2016

ТЛ; др

ZonedDateTime.now( ZonedId.of( "America/Montreal" ) ).format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " )

Подробнее

Какое решение этой проблемы? В течение месяца я думаю, что я должен добавить 1, верно?

Нет, если вы используете лучшие классы. Вы используете неприятные, запутанные, плохо разработанные классы даты и времени, которых следует избегать. Вместо этого используйте классы java.time.

ZonedDateTime

Получить текущий момент в желаемом / ожидаемом часовом поясе. Получить объект ZonedDateTime.

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

Опросите детали, если это то, что вам нужно. Классы java.time считают месяц разумно, 1-12 - январь-декабрь. Кстати, ознакомьтесь с удобным Month перечислением.

int month = zdt.getMonthValue();
int dayOfMonth = zdt.getDayOfMonth();

Чтобы получить буквально строку, которую вы показали, пусть класс DateTimeFormatter сделает всю работу. Предопределенный форматер DateTimeFormatter.ISO_LOCAL_DATE_TIME доставит вас почти до цели. Вы можете заменить T в середине пробелом, чтобы закончить.

DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_DATE_TIME ;
String output = zdt.format( f ).replace( "T" , " " );

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...