Невозможно правильно работать с Java Date Function - PullRequest
0 голосов
/ 09 мая 2018

Если я возьму текущую дату из своего приложения, она будет меняться, как показано ниже:

сценарий 1: когда дата меньше 10 числа месяца, месяц меньше 10 года -> пример: 5/9/18
сценарий 2: когда дата> = 10 числа месяца, месяц меньше> = 10 года -> пример: 10/11 / 18

Примечание: все примеры в формате ММ / ДД / ГГ , часовой пояс - США

Calendar cal = Calendar.getInstance();   
cal.add(Calendar.DATE,-2);    
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yy HH:mm a");   
String PastDate = dateFormat.format(cal.getTime());  
info("Date is displayed as : "+ PastDate );

Приведенный выше фрагмент кода выдает ошибку, когда сценарий 1 работает. Но если я отформатирую дату и время как « М / д / гг Ч: мм а », это сработает для обоих сценариев. Мне нужно добавить дату.

Будет ли хорошей практикой использование второго формата? или есть другой способ сделать это. Экспертное руководство, пожалуйста ..

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

java.time

    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
            .withLocale(Locale.US);
    ZonedDateTime dayBeforeYesterday = ZonedDateTime.now(ZoneId.of("America/St_Thomas"))
            .minusDays(2);
    System.out.println(dayBeforeYesterday.format(formatter));

Запуск только сейчас, я получил этот вывод:

5/7/18, 8:44

Пожалуйста, укажите желаемый часовой пояс, в который я поместил America / St_Thomas. Подумайте дважды, прежде чем использовать ZoneId.systemDefault() для настройки часового пояса JVM, поскольку этот параметр может быть изменен в любое время в других частях вашей программы или в других программах, работающих в той же JVM; но если вы доверяете настройке, отражающей часовой пояс пользователя, это правильная вещь.

Вместо того, чтобы определять свой собственный формат вывода, предпочтите использовать один из встроенных форматов, которые вы получаете из DateTimeFormatter.ofLocalizedDateTime. Укажите локаль (независимо от того, используете ли вы встроенный формат или катите свой собственный). Опять же, используйте Locale.getDefault(), если вы уверены, что настройка JVM верна.

Избегайте старых классов даты и времени, таких как Calendar, DateFormat и SimpleDateFormat. Они не только давно устарели, но и плохо спроектированы, а последние два особенно печально известны. Сегодня у нас намного лучше в java.time, современном Java-API даты и времени.

Ссылка: Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.

0 голосов
/ 09 мая 2018

Количество символов в формате MM указывает, что две цифры необходимы для ввода. Один символ M будет соответствовать одна или две цифры. Используйте M/d/yy H:mm a для поддержки желаемых форматов.

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