Как установить 24-часовой формат даты на Java? - PullRequest
27 голосов
/ 18 января 2012

Я занимаюсь разработкой приложения для Android, где использую этот код:

Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(d);

Мне нужно получить дату через 8 часов с текущего момента, и я хочу, чтобы эта дата имела 24-часовой формат, но я не знаю, как мне это сделать с помощью SimpleDateFormat. Мне также нужно, чтобы эта дата имела формат DD/MM/YYYY HH:MM:SS.

Ответы [ 8 ]

54 голосов
/ 18 января 2012

Это даст вам дату в 24-часовом формате.

    Date date = new Date();
    date.setHours(date.getHours() + 8);
    System.out.println(date);
    SimpleDateFormat simpDate;
    simpDate = new SimpleDateFormat("kk:mm:ss");
    System.out.println(simpDate.format(date));
53 голосов
/ 29 мая 2015

для 12-часового формата:

SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("hh:mm", Locale.UK);

для 24-часового формата:

SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("HH:mm", Locale.UK);
13 голосов
/ 18 января 2012
Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(d);

ЧЧ вернет 0-23 для часов.

КК вернет 1-24 для часов.

См. Здесь: Настройка форматов

используйте метод setIs24HourView (Boolean is24HourView) , чтобы установить средство выбора времени для установки 24-часового просмотра.

7 голосов
/ 04 февраля 2016

Использовать HH вместо hh в строке форматера

4 голосов
/ 18 января 2012

Попробуйте код ниже

    String dateStr = "Jul 27, 2011 8:35:29 PM";
    DateFormat readFormat = new SimpleDateFormat( "MMM dd, yyyy hh:mm:ss aa");
    DateFormat writeFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
    Date date = null;
    try {
       date = readFormat.parse( dateStr );
    } catch ( ParseException e ) {
        e.printStackTrace();
    }

    String formattedDate = "";
    if( date != null ) {
    formattedDate = writeFormat.format( date );
    }

    System.out.println(formattedDate);

Удачи !!!

Проверьте для различных форматов .

2 голосов
/ 19 декабря 2013

tl; dr

Современный подход использует java.time классы.

Instant.now()                                        // Capture current moment in UTC.
       .truncatedTo( ChronoUnit.SECONDS )            // Lop off any fractional second.
       .plus( 8 , ChronoUnit.HOURS )                 // Add eight hours.
       .atZone( ZoneId.of( "America/Montreal" ) )    // Adjust from UTC to the wall-clock time used by the people of a certain region (a time zone). Returns a `ZonedDateTime` object.
       .format(                                      // Generate a `String` object representing textually the value of the `ZonedDateTime` object.
           DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
                            .withLocale( Locale.US ) // Specify a `Locale` to determine the human language and cultural norms used in localizing the text being generated. 
       )                                             // Returns a `String` object.

23/01/2017 15: 34: 56

java.time

К вашему сведению, старые Calendar и Date классы теперь устаревшие ,Подменяется классами java.time .Большая часть java.time перенесена на Java 6, Java 7 и Android (см. Ниже).

Instant

Захват текущего момента в UTC с классом Instant,

Instant instantNow = Instant.now();

instant.toString (): 2017-01-23T12: 34: 56,789Z

Если вы хотите только целые секунды, без доли секунды, усечение.

Instant instant = instantNow.truncatedTo( ChronoUnit.SECONDS );

instant.toString (): 2017-01-23T12: 34: 56Z

Математика

Instantкласс может сделать математику, добавив количество времени.Укажите количество времени, которое нужно добавить с помощью перечисления ChronoUnit, реализации TemporalUnit.

instant = instant.plus( 8 , ChronoUnit.HOURS );

instant.toString (): 2017-01-23T20: 34: 56Z

ZonedDateTime

Чтобы увидеть тот же момент через объектив настенного времени определенного региона, примените ZoneId, чтобы получить ZonedDateTime.

Укажите правильное имя часового пояса в формате continent/region, например America/Montreal, Africa/Casablanca или Pacific/Auckland.Никогда не используйте 3-4-буквенное сокращение, такое как EST или IST, поскольку они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).

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

zdt.toString (): 2017-01-23T15: 34: 56-05: 00 [Америка / Монреаль]

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

Вы можете сгенерировать строку в желаемом формате, указав шаблон форматирования в объекте DateTimeFormatter.

Обратите внимание, что регистр имеет значение в буквах шаблона форматирования.Код вопроса содержал hh, что соответствует 12-часовому времени, в то время как HH в верхнем регистре соответствует 24-часовому времени (0-23) как в java.time.DateTimeFormatter, так и в устаревшем java.text.SimpleDateFormat.

Коды форматирования в java.time похожи на коды в прежнем SimpleDateFormat, но не совсем такие же.Внимательно изучите класс док.Здесь HH работает одинаково.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ).withLocale( Locale.US );
String output = zdt.format( f );

Автоматическая локализация

Вместо того, чтобы жестко кодировать шаблон форматирования, рассмотрите возможность полной локализации java.time .генерация текста String путем вызова DateTimeFormatter.ofLocalizedDateTime.

И, кстати, помните, что часовой пояс и Locale не имеют ничего делатьдруг с другом;ортогональные вопросы.Один о содержание , значение (время настенные часы).Другой - это представление , определяющее человеческий язык и культурные нормы, используемые при представлении этого значения пользователю.

Instant instant = Instant.parse( "2017-01-23T12:34:56Z" );
ZoneId z = ZoneId.of( "Pacific/Auckland" );  // Notice that time zone is unrelated to the `Locale` used in localizing.
ZonedDateTime zdt = instant.atZone( z );

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL )
                                       .withLocale( Locale.CANADA_FRENCH );  // The locale determines human language and cultural norms used in generating the text representing this date-time object.
String output = zdt.format( f );

instant.toString (): 2017-01-23T12: 34: 56Z

zdt.toString (): 2017-01-24T01: 34: 56 + 13: 00 [Pacific / Auckland]

выход: mardi 24 января 2017 à 01:34:56 heure avancée de la Nouvelle-Zelande


О java.time

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

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

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

Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , Java SE 10, а позже
    • Built в.
    • Часть стандартного Java API с встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функций java.time перенесена на Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии реализации комплекта Android классов java.time.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .

Joda-Time

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

Joda-Время значительно облегчает работу такого типа.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime later = DateTime.now().plusHours( 8 );
DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd/MM/yyyy HH:mm:ss" );
String laterAsText = formatter.print( later );

System.out.println( "laterAsText: " + laterAsText );

При запуске ...

laterAsText: 19/12/2013 02:50:18

Обратите внимание, что в этом синтаксисе используется часовой пояс по умолчанию .Лучше всего использовать явный экземпляр DateTimeZone.

0 голосов
/ 27 марта 2015

Попробуйте это ...

Calendar calendar = Calendar.getInstance();
String currentDate24Hrs = (String) DateFormat.format(
            "MM/dd/yyyy kk:mm:ss", calendar.getTime());
Log.i("DEBUG_TAG", "24Hrs format date: " + currentDate24Hrs);
0 голосов
/ 18 января 2012

Вы можете сделать это так:

Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy kk:mm:ss").format(d);

здесь 'kk: mm: ss' правильный ответ, я перепутал с базой данных Oracle, извините.

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