Я не могу редактировать дату и время - PullRequest
0 голосов
/ 25 мая 2018

Когда я пытаюсь изменить дату и время, я не могу.Он показывает ошибку:

Невозможно отформатировать данный объект как дату.

Это RegistroBean

public String Editar(Integer id){
    Registros r=this.registrosFacade.find(id);
    DateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");  
    String strDate = dateFormatter.format(fecha);
    fecha = strDate;
    this.fecha=r.getFecha().toString();
    DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss 'Z'");  
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    String strHour = dateFormat.format(hora_in);
    hora_in = strHour;
    this.hora_in=r.getHoraIn().toString();
    String strHour2 = dateFormat.format(hora_out);
    hora_out = strHour2;
    this.hora_out=r.getHoraOut().toString();

    this.vehiculo=r.getIdVehiculo();
    return "RegistroEdit";
}

public String GuardarEdicion(RegistroController rc, int id) throws ParseException{
    Registros r = new Registros();
    Locale locale = new Locale("es","CO");
    String datef = "MM/dd/yyyy";
    SimpleDateFormat formatter = new SimpleDateFormat(datef, locale);
    Date parsedDate = formatter.parse(fecha);
    r.setFecha(parsedDate);
    String hourf = "HH:mm:ss 'Z'";
    SimpleDateFormat format = new SimpleDateFormat(hourf, locale);
    format.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date Hin = format.parse(hora_in);
    r.setHoraIn(Hin);
    Date Hout = format.parse(hora_out);
    r.setHoraOut(Hout);
    r.setIdVehiculo(vehiculosFacade.find(vehiculo.getId()));
    this.registrosFacade.edit(r);
    return "RegistroList";
} 

В представлении списка при редактированииЯ нажимаю на эту кнопку:

<h:commandButton value="Editar" action="#{registroController.Editar(item.id)}"/>

это RegistroEdit.xhtml

 <?xml version='1.0' encoding='UTF-8' ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
         xmlns:h="http://xmlns.jcp.org/jsf/html"
         xmlns:f="http://xmlns.jcp.org/jsf/core"
         xmlns:p="http://primefaces.org/ui"
         xmlns:ui="http://java.sun.com/jsf/facelets">
     <h:head>
        <title>Facelet Title</title>
     </h:head>
     <h:body>
        <f:view>

            <h:form>
                <h1><h:outputText value="Editar Registro"/></h1>
                <p:panelGrid columns="2">

                    <p:outputLabel value="Fecha:" for="fecha" />
                    <p:inputText id="fecha" value="#{registroController.fecha}" title="Fecha" >

                    </p:inputText>
                    <p:outputLabel value="HoraIn:" for="horaIn" />
                    <p:inputText id="horaIn" value="#{registroController.hora_in}" title="HoraIn" required="true" requiredMessage="The HoraIn field is required.">

                    </p:inputText>
                    <p:outputLabel value="HoraOut:" for="horaOut" />
                    <p:inputText id="horaOut" value="#{registroController.hora_out}" title="HoraOut" required="true" requiredMessage="The HoraOut field is required.">

                    </p:inputText>
                    <p:outputLabel value="IdVehiculo:" for="idVehiculo" />
                    <p:selectOneMenu id="idVehiculo" value="#{registroController.vehiculo.id}" required="true" requiredMessage="The IdVehiculo field is required.">
                        <!-- TODO: update below reference to list of available items-->
                        <f:selectItems value="#{vehiculoController.findAll()}" var="v" itemLabel="#{v.placa}" itemValue="#{v.id}"/>
                    </p:selectOneMenu>
                </p:panelGrid>
                <h:panelGrid columns="2">
                    <h:commandButton id="registroCommand" value="Guardar"
                                  action="#{registroController.GuardarEdicion(registroController, registroController.id)}"/>          
                    <h:commandButton id="registroCommand1" value="Ir a Lista"
                                 action="#{registro.prepareList()}"/> 
                </h:panelGrid>
            </h:form>
        </f:view>

    </h:body>

</html>

, пытающийся отредактировать дату и время, когда оно появляется в виде списка в следующем формате:

fecha: вс 27 мая 00:00:00 COT 2018

hora_in: четверг 01 06:15:30 COT 1970

hora_out: четверг 01 14:30:00 COT 1970

должны отображаться дата и время в этом формате

fecha: 05/27/2018

hora_in: 06: 15: 30

hora_out: 14: 30: 00

Что я должен изменить, чтобы преобразовать дату в строку без ошибок?

1 Ответ

0 голосов
/ 25 мая 2018

Я разочаровался в понимании ваших методов вне контекста.Я думаю, что вы ищете что-то вроде следующего.

    DateTimeFormatter dateFormatter = DateTimeFormatter. ofPattern("MM/dd/yyyy");
    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss X");

    ZoneOffset offset = ZoneOffset.UTC;
    LocalDate fecha = LocalDate.now(offset);
    OffsetTime horaIn = OffsetTime.of(15, 0, 0, 0, offset);
    OffsetTime horaOut = OffsetTime.of(17, 37, 15, 0, offset);

    String strDate = fecha.format(dateFormatter);
    System.out.println(strDate);
    String strHourIn = horaIn.format(timeFormatter);
    System.out.println(strHourIn);
    String strHourOut = horaOut.format(timeFormatter);
    System.out.println(strHourOut);

Этот код печатает:

05/25/2018
15:00:00 Z
17:37:15 Z

Я использую java.time, современный Java API даты и времени.SimpleDateFormat общеизвестно хлопотно, и вместе с Date и DateFormat давно устарели.Вместо того, чтобы жестко кодировать букву Z в формате времени, я предпочел поместить смещение в формат данных I, чтобы оно также давало правильный вывод, если однажды мы решим использовать другое смещение (класс OffsetTime редкоиспользуется, но здесь кажется правильным).

Если вы получите ваше время как LocalTime, то есть без смещения, например, из вашей базы данных, конвертируйте так:

    OffsetTime hora = localTimeFromDatabase.atOffset(offset);

Ссылка: Обучающая программа Oracle: Дата и время , объясняющая, как использовать java.time.

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