ТЛ; др
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.