Я хочу конвертировать входящую дату из 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. Любая помощь приветствуется. Благодарю!
Вы сказали, что хотите преобразовать дату с заданным форматом, но у вас нет параметра для этого.
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);
}
Это должно сделать трюк:
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);
}
Вы должны посмотреть на функцию 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);
}
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
).toString()
2017-01-23
Вы используете неприятные старые классы времени, которые теперь вытесняются классами 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 8 и более поздние версии. Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь в режиме обслуживания, советует перейти на классы java.time.
Чтобы узнать больше, ознакомьтесь с учебным пособием Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация - JSR 310.
Где можно получить классы java.time?
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и другие.
Вам необходимо проанализировать входную 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
и вы можете преобразовать его в любой формат, который вам понадобится позже.
Я также хотел бы продвигать форматы для членов класса, поскольку они дороги для построения, поэтому их следует использовать повторно, хотя следует отметить, что они не являются потокобезопасными.