can a String be converted into a Date list in java?

1

Within my class, I have the following method

public void buscaDetalleIncidencia() {
        System.out.println("ENTRO AL METODO BUSCA DETALLE POR AÑO/MESSS");

        muestraTablaDetalle = true;

        incidenciaAnioMesDet = anioMesDetService.findIncidenciaAnioMesDeByAnioMes(cvePersona, annio, mes);
        
        System.out.println("INCIDENCIA\n" + "DIA-" +incidenciaAnioMesDet.get(0).getDia() + " MES-" +incidenciaAnioMesDet.get(0).getIncidenciaAnioMes().getMes() + " AÑO-" +incidenciaAnioMesDet.get(0).getIncidenciaAnioMes().getAnio() +" CVE INCIDENCIA-" +incidenciaAnioMesDet.get(0).getIncidencias().getCveIdIncidencia());

        //PRUEBA LISTA
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(annio, mes - 1, 1);

        while (calendar.get(Calendar.MONTH) == mes - 1) {
            fechas.add(calendar.getTime());
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }

        System.out.println("PREBA LISTA FECHA" + fechas);

    }

where to my list incidenceAnotherMesDet I pass the find that returns the following in console

INCIDENCE DAY-1 MONTH-3 YEAR-2018 CVE INCIDENCE-12

now that data is the one that I must paint on my table, in the incidence column on 12, on the row corresponding to the column dated 01/02/2018

    
asked by Root93 07.03.2018 в 19:19
source

2 answers

2

You have to build a Date list from your month and year. An example of implementation using Calendar below:

/**
 *
 * @param mes 1 = Enero, 12 = Diciembre
 * @param anio
 * @return
 */
public static List<Date> crearFechas(int mes, int anio) {
    Calendar calendar = Calendar.getInstance();
    calendar.clear();
    calendar.set(anio, mes - 1, 1);

    List<Date> fechas = new ArrayList<>();
    while (calendar.get(Calendar.MONTH) == mes - 1) {
        fechas.add(calendar.getTime());
        calendar.add(Calendar.DAY_OF_MONTH, 1);
    }
    return fechas;
}

You should also create another class to associate a date with its respective incidence:

public class FechaIncidencia {
    private Date fecha;
    private Incidencia incidencia;

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public Incidencia getIncidencia() {
        return incidencia;
    }

    public void setIncidencia(Incidencia incidencia) {
        this.incidencia = incidencia;
    }
}

Then with your list of dates for the month, create a list of FechaIncidencia with both associated objects:

public static List<FechaIncidencia> crearFechaIncidencia(List<Incidencia> incidenciaAnioMesDet, int mes, int anio) {
    List<Date> fechas = crearFechas(mes, anio);
    List<FechaIncidencia> fechasIncidencias = new ArrayList<>();
    Calendar calendar = Calendar.getInstance();
    for(Date fecha : fechas) {
        FechaIncidencia fechaIncidencia = new FechaIncidencia();
        fechaIncidencia.setFecha(fecha);
        calendar.setTime(fecha);
        for(Incidencia incidencia : incidenciaAnioMesDet) {
            if(calendar.get(Calendar.DAY_OF_MONTH) == incidencia.getDia()) {
                fechaIncidencia.setIncidencia(incidencia);
                break;
            }
        }
        fechasIncidencias.add(fechaIncidencia);
    }
    return fechasIncidencias;
}

You would use it in your code in the following way:

incidenciaAnioMesDet = anioMesDetService.findIncidenciaAnioMesDeByAnioMes(cvePersona, annio, mes);
fechasIncidencias = crearFechaIncidencia(incidenciaAnioMesDet, mes, annio);

Finally the list of datesIncidences is what you should iterate in your <p:dataTable> :

<p:dataTable id="detalle" var="detalle" styleClass="columns"
    value="#{RegistroAccesoComponent.fechasIncidencias}" emptyMessage="No se encontraron registros.">
...
<p:column styleClass="columns">
  <h:outputText value="#{detalle.fecha}">
    <f:convertDateTime type="date" pattern="dd/MM/yyyy" />
  </h:outputText>
</p:column>
<p:column styleClass="columns">
  <h:outputText value="#{detalle.incidencia.horaEntrada}">
    <f:convertDateTime type="date" timeZone="CST" pattern="HH:mm:ss" />
  </h:outputText>
</p:column>
...
</p:dataTable>
    
answered by 08.03.2018 / 02:27
source
0

this is my class

   @Scope("session")
@Component("RegistroAccesoComponent")
public class RegistroAccesoComponentImpl extends BaseBean implements RegistroAccesoComponent, Serializable {


	private Integer annio;
    private Integer mes;
	private List<Date> fechas = new ArrayList<>();

//Metodo que inicializa
@Override
    public String newRegistroAcceso() {
	
	// Obtienes el mes actual
        mes = LocalDate.now().getMonth().getValue();
	
	//Se obtiene el año actual
        Year año = Year.now();
        annio = año.getValue();
		
		//PRUEBA LISTA
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(annio, mes - 1, 1);

       
        while (calendar.get(Calendar.MONTH) == mes - 1) {
            fechas.add(calendar.getTime());
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }

        System.out.println("PREBA LISTA FECHA" + fechas);
	
	}



}

and this is my table

<p:dataTable id="detalle" var="detalle" styleClass="columns" value="#{RegistroAccesoComponent.fechas}" emptyMessage="No se encontraron registros.">

  <p:columnGroup type="header">
    <p:row>

      <p:column headerText="FECHA" style="width:20px;" styleClass="columns" />
      <p:column headerText="ENTRADA" style="width:20px;" styleClass="columns" />
      <p:column headerText="SALIDA" style="width:20px;" styleClass="columns" />
      <p:column headerText="INCIDENCIA" style="width:60px;" styleClass="columns" />
      <p:column headerText="ACCIÓN" style="width:10px;" styleClass="columns" />
    </p:row>
  </p:columnGroup>
  <p:column styleClass="columns">
    <h:outputText value="#{detalle.day}">
      <f:convertDateTime type="date" pattern="dd/MM/yyyy" />
    </h:outputText>
  </p:column>

  <p:column styleClass="columns">
    <h:outputText>
      <f:convertDateTime type="date" timeZone="CST" pattern="HH:mm:ss" />
    </h:outputText>

  </p:column>
  <p:column styleClass="columns">
    <h:outputText>
      <f:convertDateTime type="date" timeZone="CST" pattern="HH:mm:ss" />
    </h:outputText>
  </p:column>
  <p:column styleClass="columns">
    <h:outputText />
  </p:column>
  <p:column styleClass="columns">
    <p:commandButton icon="ui-icon-search" title="View" onclick="PF('modalIntentos').show();">
    </p:commandButton>
  </p:column>
</p:dataTable>

and what it shows

    
answered by 09.03.2018 в 19:21