Как я могу создать строку DateTime, используя строку даты и строку времени?
Я хочу создать строку DateTime со следующим форматом 2013-08-30T15:06:00
используя три строки. Одна строка имеет дату "30-aug-2013"
и вторая строка имеет время "15:06"
и последняя строка имеет значение дней "2"
. Теперь я хочу использовать эти три строки для создания результирующей строки, как "2013-08-28T15:06:00"
, Значение дней - создание даты в прошлом, поэтому в этом случае дата меняется с 30 августа на 28 августа
Решение, которое я попробовал:
public String getFormattedDate(String date, String selectedDays, String time) {
String dtStart = date;
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
try {
Date dateObject = format.parse(dtStart);
System.out.println(date);
Calendar calendar = new GregorianCalendar();
calendar.setTime(dateObject);
calendar.add(Calendar.DAY_OF_MONTH, Integer.valueOf(selectedDays));
System.out.println(calendar.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
В вышеуказанном решении calendar.add
добавит дни вместо удаления дней из даты. Также я не знаю, как использовать строку времени, чтобы установить ее на объекте даты.
4 ответа
Если ваше время String
всегда в этом формате, вам нужно будет использовать time.split(":")
чтобы получить часы и минуты.
Возможно, вы захотите указать формат вывода вместо использования Locale
формат по умолчанию также.
Добавьте знак минус в substract вместо добавления для Calendar.add()
,
Ваш код использовать dd-MM-yyyy
но твоя месячная часть написана, 08-aug-2013
который должен быть проанализирован с помощью dd-MMM-yyyy
вместо.
Это должно вывести как вы указали
public static String getFormattedDate(String date, String selectedDays, String time) {
String dtStart = date;
Calendar calendar = new GregorianCalendar();
calendar.clear();
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy"); // This should be MMM and not MM according to the date format 08-aug-2013
try {
Date dateObject = format.parse(dtStart);
System.out.println(date);
calendar.setTime(dateObject);
String[] hoursMins = time.split(":");
int hours = Integer.valueOf(hoursMins[0]);
int minutes = Integer.valueOf(hoursMins[1]);
calendar.set(Calendar.HOUR_OF_DAY, hours);
calendar.set(Calendar.MINUTE, minutes);
calendar.set(Calendar.SECOND, 0); // Here, I have no idea where you get the seconds, so I just set them to 0
calendar.add(Calendar.DAY_OF_MONTH, -Integer.valueOf(selectedDays)); // Add a minus sign to substract
// System.out.println(calendar.getTime());
// Use a SimpleDateFormat instead
System.out.println(outputFormat.format(calendar.getTime()));
// System.out.println(calendar.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return outputFormat.format(calendar.getTime());
}
Если вы хотите почитать о форматировании символов, проверьте нижнюю часть этой ссылки, она довольно хорошо объяснена.
призвание getFormattedDate("08-aug-2013", "2", "15:05");
с этим выводом кода 2013-08-06T15:05
,
Редактировать: я забыл секунды, вывод теперь: 2013-08-06T15:05:00
Calendar.add
Можно удалить дни, добавив отрицательное значение:
SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy"); <-- check your format
Date d = format.parse("08-aug-2013");
Calendar c = new GregorianCalendar();
c.setTime(d);
c.add(Calendar.DAY_OF_MONTH, -2); <-- see that you are parsing to a negative int
System.out.println(c.getTime());
Печать:
Вт Авг 06 00:00:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2013
Избегайте juDate & .Calendar
Классы java.util.Date и.Calendar печально известны своими проблемами. Избежать их. Вместо этого используйте библиотеку Joda-Time.
Часовой пояс
Другие ответы игнорируют критическую проблему часового пояса. Вы должны указать, представляет ли эта строка дату-время в Париже, Туквиле или Калькутте. Если вы не укажете, применяется часовой пояс JVM по умолчанию.
язык
В других ответах не указывается язык, на котором нужно анализировать название месяца.
Пример использования Joda-Time
String input = "30-aug-2013" + "15:06";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "d-MM-yyyyH:mm" );
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
java.util.Locale locale = java.util.Locale.ENGLISH;
DateTime dateTime = formatter.withLocale( locale ).withZone( timeZone ).parseDateTime( input" );
Если необходимо, преобразуйте в java.util.Date, автоматически адаптируясь к UTC, поскольку Дата не имеет часового пояса.
java.util.Date date = dateTime.toDate();
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
String date = mYear + "-" + mMonth + "-" + mDay; // + time + ... so on