Как преобразовать дату, которую пользователь выбирает в формате MM-дд-гггг, в формат гггг-мм-дд в Java

1

Я хочу конвертировать входящую дату из MM-dd-yyyy, которая является форматом на передней панели, и преобразовать ее в формат yyyy-MM-dd. Это полезно, так как для бэкэнд-запроса требуется формат yyyy-MM-dd. У меня возникают проблемы с синтаксисом. Я знаю, когда я делаю Date = new Date(), который инициализируется только для сегодняшней даты, но я хочу, чтобы paramater был входящей датой, которую пользователь выбирает, что может быть тем, кем она хочет быть. У меня есть два формата даты:

public final static String getConvertedDate()
{
    DateFormat userFormat = new SimpleDateFormat(MM-dd-yyyy);
    DateFormat neededFormat = new SimpleDateFormat(yyyy-MM-dd);
    //now I want to set it up to where I have a date the user selects
    Date date = new Date() //I feel like I should input a parameter for any given date in Date() but am    //unsure
    //return statement returning the neededFormat
}

Я могу или не могу правильно настроить его и не знаю, нужно ли мне настроить два DateFormat. Любая помощь приветствуется. Благодарю!

Теги:
date
simpledateformat
date-formatting

5 ответов

3

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

public final static String getConvertedDate(String givenDaten) throws ParseException
{
    DateFormat userFormat = new SimpleDateFormat(MM-dd-yyyy);
    DateFormat neededFormat = new SimpleDateFormat(yyyy-MM-dd);

    //first parse the userformatted date
    Date userFormatDate = userFormat.parse(givenDate);

    //format it as needed
    return neededFormat.format(date);
}
1

Это должно сделать трюк:

public String convertDate(String input) throws ParseException{
    SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
    Date temp = sdf.parse(input);
    sdf.applyPattern("yyyy-MM-dd");
    return sdf.format(temp);
}
1

Вы должны посмотреть на функцию format для SimpleDateFormat

Быстрый пример

public final static String getConvertedDate(String userDate)
{
    DateFormat userFormat = new SimpleDateFormat(MM-dd-yyyy);
    DateFormat neededFormat = new SimpleDateFormat(yyyy-MM-dd);

    // Turn the String of the userDate into a date with the first format
    Date formatUserDate = userFormat.parse(userDate);

    // Now format that date into the correct format you want to return
    return neededFormat.format(formatUserDate);
}
  • 0
    Я вижу, что мне нужно отформатировать входящую дату, однако эта дата не может быть просто ручным вводом. 08-10-1999, или просто что-то добавить, это не то, что я ищу, я хочу, чтобы параметр был таким, какой бы пользователь ни выбрал, который может быть чем угодно.
  • 0
    Позвольте мне изменить это для вас
0

ТЛ; др

LocalDate.parse( 
    "01-23-2017" , 
    DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) 
).toString()

2017-01-23

Использование java.time

Вы используете неприятные старые классы времени, которые теперь вытесняются классами java.time.

String input = "01-23-2017" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f );

Ваш желаемый результат соответствует стандарту ISO 8601. Классы java.time используют стандартные форматы по умолчанию при разборе/генерации строк.

String output = ld.toString() ;

2017-01-23


О java.time

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

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

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

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

  • Java SE 8, Java SE 9 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API с интегрированной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональных возможностей java.time включена обратно в Java 6 и 7 в ThreeTen-Backport.
  • Android
    • Более поздние версии реализаций пакетов Android классов java.time.
    • Для более ранних Android проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). См. Раздел Как использовать ThreeTenABP....

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

0

Вам необходимо проанализировать входную String с помощью DateFormat:

public static void main(String[] args) throws Exception {
    final DateFormat in = new SimpleDateFormat("MM-dd-yyyy");
    final Date date = in.parse("03-11-2013");
    System.out.println(date);
    final DateFormat out = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(out.format(date));
}

Вывод:

Mon Mar 11 00:00:00 CET 2013
2013-03-11

Обратите внимание: вам, вероятно, лучше использовать объект Date в вашем коде. JDBC может принимать Date только с простым преобразованием в java.sql.Date и вы можете преобразовать его в любой формат, который вам понадобится позже.

Я также хотел бы продвигать форматы для членов класса, поскольку они дороги для построения, поэтому их следует использовать повторно, хотя следует отметить, что они не являются потокобезопасными.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню