Форматирование даты и времени - PullRequest
2 голосов
/ 02 января 2012

У меня есть вопрос, связанный с преобразованием / форматированием даты.

У меня есть дата, скажем, workDate со значением, например: 2011-11-27 00:00:00 Из текстового поля ввода я получаю значение времени (в виде строки) в форме «ЧЧ: мм: сс», например: «06:00:00»

Моя задача - создать новую дату, скажем, newWorkDate, имеющую тот же год, месяц, дату, что и workDate, и время, которое будет входным значением текстового поля.

Таким образом, в этом случае newWorkDate должно быть равно 2011-11-27 06:00:00. Можете ли вы помочь мне понять, как этого можно достичь с помощью Java?

Вот что у меня есть:

    SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
    //Text box input is converted to Date format -what will be the default year,month and date set here?
     Date textBoxTime = df.parse(minorMandatoryShiftStartTimeStr);

     Date workDate = getWorkDate();
     int year = Integer.parseInt(DateHelper.getYYYYMMDD(workDate).substring(0, 4));
     int month = Integer.parseInt(DateHelper.getYYYYMMDD(workDate).substring(4, 6));
     int date = Integer.parseInt(DateHelper.getYYYYMMDD(workDate).substring(6, 8));

     Date newWorkDate = DateHelper.createDate(year, month, day);
    //not sure how to set the textBox time to this newWorkDate.

[UPDATE]: Thx for the help,guys!Here is the updated code based on all your suggestions..Hopefully this will work.:)

 String[] split = textBoxTime.split(":");
             int hour = 0;
               if (!split[0].isEmpty)){ 
               hour = Integer.parseInt(split[0]);}
             int minute = 0;
             if (!split[1].isEmpty()){
             minute = Integer.parseInt(split[1]);}
             int second = 0;
             if (!split[2].isEmpty()){
                second  = Integer.parseInt(split[2]);}

              Calendar cal=Calendar.getInstance();  
              cal.setTime(workDate); 
              cal.set(Calendar.HOUR, hour); 
              cal.set(Calendar.MINUTE, minute);  
              cal.set(Calendar.SECOND, second);  
              Date newWorkDate = cal.getTime(); 

Ответы [ 3 ]

2 голосов
/ 02 января 2012

Пара подсказок:

  1. Используйте объект Calendar для работы с датами.Вы можете установить Calendar из Date, так что способ создания дат textBoxTime и workDate в порядке.
  2. Установите значения workDate из textBoxTime с помощью методов setXXXв Calendar class (make workDate a Calendar)
  3. Вы можете использовать SimpleDateFormat для форматирования и анализа.Используйте это для получения желаемого результата.

Вы должны быть в состоянии сделать это без разбора строк и всего лишь нескольких строк кода.

1 голос
/ 02 января 2012

Вам может понадобиться следующий код.

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateFormat {
    public static void main(String[] args) {
        try {
            SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
            Date workDate = simpleDateFormat1.parse("2011-11-27");
            Calendar workCalendar= Calendar.getInstance();
            workCalendar.setTime(workDate);
            SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("HH:mm:ss");
            Calendar time = Calendar.getInstance();
            time.setTime(simpleDateFormat2.parse("06:00:00"));
            workCalendar.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY));
            workCalendar.set(Calendar.MINUTE, time.get(Calendar.MINUTE));
            workCalendar.set(Calendar.SECOND, time.get(Calendar.SECOND));
            Date newWorkDate = workCalendar.getTime();
            SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat(
                    "yyyy-MM-dd hh:mm:ss");
            System.out.println(simpleDateFormat3.format(newWorkDate));
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Надеюсь, это поможет вам.

1 голос
/ 02 января 2012

Поскольку у вас уже есть дата работы, все, что вам нужно сделать, это преобразовать ваш временной интервал в секунды и добавить его в свой объект даты.

Использовать календарь для арифметики даты.

 Calendar cal=Calendar.getInstance();
 cal.setTime(date);
 cal.add(Calendar.HOUR, hour);
 cal.add(Calendar.MINUTE, minute);
 cal.add(Calendar.SECOND, second);
 Date desiredDate = cal.getTime();
...