No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende Ingl茅s, Programaci贸n, AI, Ciberseguridad y m谩s a precio especial.

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

2 D铆as
19 Hrs
45 Min
53 Seg
Curso Avanzado de Java SE

Curso Avanzado de Java SE

Anah铆 Salgado D铆az de la Vega

Anah铆 Salgado D铆az de la Vega

Reto: Reporte por fecha

31/40
Recursos

Aportes 20

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Ac谩 les comparto el link del tutorial que realic茅 para este reto:
link

Dejo mi solucion:

  1. Modificacion de la tabla viewed para incorporar el campo fechahora. Es aconsejable evitar usar nombres reservados como datetime, timestamp, son propios de las Bases de datos, y pueden causar problemas
    He creado de tipo DATETIME y he puesto not null y que se le asigne un valor por defecto de fecha actual, con esto no es necesario cambiar el insert de viewed en el codigo
ALTER TABLE `viewed` ADD `fecha_viewed` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `id_user`;
  1. En la clase DataBase se ha agregado la constante de acuerdo al nombre del campo en mi caso:
public static final String TVIEWED_FECHAVIEWED 	= "fecha_viewed";
  1. En la clase MovieDAO he sobrecargado el metodo read para pasar una fecha, notar que se requiere los vistos de una fecha por eso funciona una consulta directa con JOIN, solo se mostraran los libros vistos de acuerdo a la fecha:
default ArrayList<Movie> read(Date date) {
		ArrayList<Movie> movies = new ArrayList<Movie>();
		java.sql.Date dt = new java.sql.Date(date.getTime());
		/*SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		String dateString = df.format(date);*/
		try (Connection connection = connecToDB()) {
			String query = "SELECT * FROM " + TMOVIE + " INNER JOIN " + TVIEWED +
					" ON (" + TMOVIE + "." + TMOVIE_ID + " = " + TVIEWED + "." + TVIEWED_IDELEMENT + ")" +
					" WHERE " + TVIEWED + "."  + TVIEWED_IDMATERIAL + " = ? " +
				    " AND "+ TVIEWED + "." + TVIEWED_IDUSUARIO + " = ?" +
				    " AND DATE(" + TVIEWED + "." + TVIEWED_FECHAVIEWED + ") = ?";
			
			PreparedStatement preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, ID_TMATERIALS[0]);			
			preparedStatement.setInt(2, TUSER_IDUSUARIO);
			preparedStatement.setDate(3, dt);
			ResultSet rs = preparedStatement.executeQuery();

			while (rs.next()) {
				Movie movie = new Movie(rs.getString(TMOVIE_TITLE), rs.getString(TMOVIE_GENRE),
						rs.getString(TMOVIE_CREATOR), rs.getInt(TMOVIE_DURATION), rs.getShort(TMOVIE_YEAR));

				movie.setId(rs.getInt(TMOVIE_ID));
				movie.setViewed(true);
				movies.add(movie);
			}

		} catch (SQLException e) {
			// TODO: handle exception
		}
		return movies;
	}```

Hay que notar algunas cosas: 
 - Es aconsejable anidar en el query los valores de  parametros, si no mas bien hacerlo como lo hace ann mediante "?"  para evitar SQLInjection 
INCORRECTO

TVIEWED + 鈥.鈥 + TVIEWED_IDUSUARIO + " = " + TUSER_IDUSUARIO

CORRECTO

TVIEWED + 鈥.鈥 + TVIEWED_IDUSUARIO + " = ?"
preparedStatement.setInt(1, TUSER_IDUSUARIO);

 - Otra cosa en el codigo manejamos por Date pero es de tipo java.util.Date pero el JDBC usa el tipo java.sql.Date que no es lo mismo por lo cual se procede a realizar la conversion.

java.sql.Date dt = new java.sql.Date(date.getTime());
Para usar el parametro asi
preparedStatement.setDate(3, dt);

- Y una tercera ya no es necesario poner el siguiente codigo

movie.setViewed(getMovieViewed(preparedStatement, connection, rs.getInt(TMOVIE_ID)));

Como se pide solo los vistos, siempre sera true

movie.setViewed(true);


4. En la clase Movie se ha sobrecargado el metodo para pasar el filtro de fecha

public static ArrayList<Movie> makeMoviesList(Date date) {
Movie movie = new Movie();
return movie.read(date);
}

5. En la clase Main se ha llamado al metodo anterior para consultar las peliculas de acuerdo al filtro
movies = Movie.makeMoviesList(date);


Quedando de esta manera

public static void makeReport(Date date) {
SimpleDateFormat df = new SimpleDateFormat(鈥測yyy-MM-dd-h-m-s-S鈥);
String dateString = df.format(date);
Report report = new Report();

	report.setNameFile("reporte" + dateString);
	report.setExtension("txt");
	report.setTitle(":: VISTOS ::");

	SimpleDateFormat dfNameDays = new SimpleDateFormat("E,dd MMM Y");
	dateString = dfNameDays.format(date);
	String contentReport = "Date: " + dateString + "\n\n\n";
	
	movies = Movie.makeMoviesList(date);

	for (Movie movie : movies) {
		if (movie.getIsViewed()) {
			contentReport += movie.toString() + "\n";

		}
	}

	for (Serie serie : series) {
		ArrayList<Chapter> chapters = serie.getChapters();
		for (Chapter chapter : chapters) {
			if (chapter.getIsViewed()) {
				contentReport += chapter.toString() + "\n";

			}
		}
	}

	for (Book book : books) {
		if (book.getIsReaded()) {
			contentReport += book.toString() + "\n";

		}
	}
	report.setContent(contentReport);
	report.makeReport();

	System.out.println("Reporte Generado");
	System.out.println();
}```

Con esto logramos imprimir el reporte de las peliculas vistas de hoy

Listo 馃槂

  1. Primero creamos la nueva columna en la tabla viewed:

    ALTER TABLE AmazonViewer.viewed ADD viewed_date DATETIME;

  2. Modificamos la clase utilitaria AmazonUtil y agregamos un m茅todo nuevo que nos formatee la fecha actual:

    public static String getCurrentDate() {
    Date date = new Date();
    SimpleDateFormat format = new SimpleDateFormat(鈥測yyy-MM-dd 00:00:00.0鈥);
    String dateString = format.format(date);
    return dateString;
    }

  3. Modificamos en el metodo setMoviedViewed el query para agregar la fecha:

    String query = 鈥淚NSERT INTO " + TVIEWED + " (鈥 + TVIEWED_ID_MATERIAL + 鈥,鈥 + TVIEWED_ID_ELEMENT + 鈥,鈥
    + TVIEWED_ID_USER + 鈥,鈥 + TVIEWED_DATE + 鈥)鈥 + " VALUES(" + ID_MATERIALS[0] + 鈥,鈥 + movie.getId()
    + 鈥,鈥 + TUSER_IDEUSUARIO + 鈥,鈥"+AmazonUtil.getCurrentDate() + 鈥溾)";

  4. Agrego dos metodos nuevos a la interfaz MovieDAO para buscar por fecha actual

     private boolean getMovieViewedByDay(PreparedStatement preparedStatement, Connection connection, int id_movie) {
     boolean viewed = false;
     String query = "SELECT * FROM " + TVIEWED + " WHERE " + TVIEWED_ID_MATERIAL + "= ?" + " AND "
     		+ TVIEWED_ID_ELEMENT + "= ?" + " AND " + TVIEWED_ID_USER + "= ?" +" AND " + TVIEWED_DATE +"=\""+AmazonUtil.getCurrentDate()+"\"";
     ResultSet rs = null;
     try {
     	preparedStatement = connection.prepareStatement(query);
     	preparedStatement.setInt(1, ID_MATERIALS[0]);
     	preparedStatement.setInt(2, id_movie);
     	preparedStatement.setInt(3, TUSER_IDEUSUARIO);
     	System.out.println(query);
     	rs = preparedStatement.executeQuery();
     	viewed = rs.next();
     } catch (Exception e) {
     	// TODO: handle exception
     }
    
     return viewed;
    

    }

    default ArrayList<Movie> readByDay() {
    ArrayList<Movie> movies = new ArrayList<>();
    try (Connection connection = connectToDB()) {
    String query = "SELECT * FROM " + TMOVIE;
    PreparedStatement preparedStatement = connection.prepareStatement(query);
    ResultSet rs = preparedStatement.executeQuery();
    while (rs.next()) {
    Movie movie = new Movie(rs.getString(TMOVIE_TITLE), rs.getString(TMOVIE_GENRE),
    rs.getString(TMOVIE_CREATOR), Integer.valueOf(rs.getString(TMOVIE_DURATION)),
    Short.valueOf(rs.getString(TMOVIE_YEAR)));
    movie.setId(Integer.valueOf(rs.getString(TMOVIE_ID)));
    movie.setViewed(
    getMovieViewedByDay(preparedStatement, connection, Integer.valueOf(rs.getString(TMOVIE_ID))));
    movies.add(movie);
    }
    } catch (SQLException e) {
    // TODO: handle exception
    }
    return movies;
    }

  5. Agregamos metodo a la clase Movie para listar las pelicualas vistas solo del d铆a

    public static ArrayList<Movie> makeMoviesListByDay() {
    Movie movie = new Movie();
    return movie.readByDay();
    }

  6. Modifico el metodo MakeReport(Date date) en la clase Main para pintar solo las diarias

    ArrayList<Movie> moviesDay = Movie.makeMoviesListByDay();
    for (Movie movie : moviesDay) {
    if (movie.getIsViewed()) {
    contentReport += movie.toString() + 鈥淺n鈥;

     	}
     }

Adjunto las im谩genes del c贸digo insertado o modificado





yo tambien ya lo termine, aunque le a帽adi ciertas cosas mas, en vez de trabajar con datetime, trabaje con timestamps, tiene algunas caracteristicas bien utiles, ademas no quise hacer JOINS (puede que me falte el cursito de fundamentos de BD), en vez hice un foreach anidado que simplifica el trabajo de buscar por fecha, mas info en la repo:
amazonviewer

Hola!
Escrib铆 un tutorial explicando c贸mo resolver este reto y por qu茅 se resuelve de esa manera! 馃槃
Espero que les guste.

Excelente reto!

Yo simplemente desde el myphpadmin coloqu茅 que capturar谩 el dato de la fecha apenas se introdujera la tupla, esta bien hecho?

Hice una sobrecarga de los metodos para generar el reporte y se modific贸 el metodo de setMovieViewed para que incluyera el momento en que se visualiz贸.

default Movie setMovieViewed(Movie movie) {
		Date dateNow = new Date();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:m:ss");
		String dateString = df.format(dateNow);
		
		
		
		try (Connection connection = connectToDB()){
			Statement statement = connection.createStatement();
			String query = "INSERT INTO "+TVIEWED+
					" ("+TVIEWED_ID_MATERIAL+", "+TVIEWED_ID_ELEMENT+", "+TVIEWED_ID_USER+", "+TVIEWED_DATEVIEWED+") "+
					"VALUES ("+ID_MATERIALS[0]+", "+movie.getId()+", "+TUSER_ID_USUARIO+", '"+dateString+"')";
			
			if (statement.executeUpdate(query)>0) {
				System.out.println("Se marc贸 en Visto");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return movie;		
	}

public static void makeReport(Date date) {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-h-m-s-S");
		String dateString = df.format(date);
		Report report = new Report();

		report.setNameFile("reporte" + dateString);
		report.setExtension("txt");
		report.setTitle(":: VISTOS ::");

		SimpleDateFormat dfNameDays = new SimpleDateFormat("E, W MMM Y");
		dateString = dfNameDays.format(date);
		String contentReport = "Date: " + dateString + "\n\n\n";

		movies=Movie.makeMoviesList(date);
		
		
		for (Movie movie : movies) {
			if (movie.getIsViewed()) {
				contentReport += movie.toString() + "\n";
			}
		}

		for (Serie serie : series) {
			ArrayList<Chapter> chapters = serie.getChapters();
			for (Chapter chapter : chapters) {
				if (chapter.getIsViewed()) {
					contentReport += chapter.toString() + "\n";

				}
			}
		}

		for (Book book : books) {
			if (book.getIsReaded()) {
				contentReport += book.toString() + "\n";

			}
		}
		report.setContent(contentReport);
		report.makeReport();

		System.out.println("Reporte Generado");
		System.out.println();
	}

public static ArrayList<Movie> makeMoviesList(Date today) {
		Movie movie = new Movie();
		return movie.read(today);
	}

default ArrayList<Movie> read(Date today){	
		ArrayList<Movie> movies =  new ArrayList<>();
		try (Connection connection = connectToDB()){
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
			String dateString = df.format(today);
			
			String query = "SELECT M.* FROM movie M JOIN viewed V ON M.id=V.id_element WHERE DATE(V.dateViewed)=DATE('"+dateString+"');";			
			PreparedStatement preparedStatement = connection.prepareStatement(query);			
			ResultSet rs = preparedStatement.executeQuery();
			
			while (rs.next()) {
				Movie movie = new Movie(
						rs.getString(TMOVIE_TITLE),
						rs.getString(TMOVIE_GENRE),
						rs.getString(TMOVIE_CREATOR),
						Integer.parseInt(rs.getString(TMOVIE_DURATION)),
						Short.valueOf(rs.getString(TMOVIE_YEAR)));
				
				movie.setID(Integer.parseInt(rs.getString(TMOVIE_ID)));
				movie.setViewed(getMovieViewed(
						preparedStatement,
						connection,
						Integer.parseInt(rs.getString(TMOVIE_ID))));
				movies.add(movie);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return movies;
	}

Yo utilic茅 la fecha con el siguiente formato 鈥測yy-MM-dd鈥, para que el reporte salgan las peliculas que se vier贸n en el d铆a actual:
-Modifique la tabla viewed de la siguiente manera:
ALTER TABLE viewed CHANGE date_actual date_actual DATE NULL DEFAULT NULL;

-La interfaz MovieDao la dej茅 de la sigueinte manera

package com.lsc.amazonviewer.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import static com.lsc.amazonviewer.db.DataBase.*;

import com.lsc.amazonviewer.db.IDBConnection;
import com.lsc.amazonviewer.model.Movie;



public interface MovieDao extends IDBConnection {

	
	default Movie setMovieViewed(Movie movie) {
		Date date = new Date();
		SimpleDateFormat df = new SimpleDateFormat("yyy-MM-dd");
		String dateString = df.format(date);
		try(Connection connection = connectTODB()){
		//	Statement statement= connection.createStatement();
			String query = "INSERT INTO " + TVIEWED +
					"("+ TVIEWED_IDMATERIAL+", "+TVIEWED_IDELEMENT+", "+TVIEWED_IDUSUARIO+", "+TVIEWED_DATE+")"+
					"VALUES(?, ?, ?, ?)";
			PreparedStatement pst = (PreparedStatement) connection.prepareStatement(query);
			pst.setInt(1, ID_TMATERIALS[0]);
			pst.setInt(2, movie.getId());
			pst.setInt(3, TUSER_IDUSUARIO);
			pst.setString(4, dateString);
			
			pst.execute();

			
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return movie;

	}
	
	default ArrayList<Movie>read(){
		ArrayList<Movie>movies = new ArrayList();
		try(Connection connection = connectTODB()){
			String query = "SELECT * FROM " +  TMOVIE;			
			PreparedStatement preparedStatement = connection.prepareStatement(query); 
			ResultSet rs = preparedStatement.executeQuery(); 
			
			while (rs.next()){
				Movie movie = new Movie(
						rs.getString(TMOVIE_TITLE), 
						rs.getString(TMOVIE_GENRE), 
						rs.getString(TMOVIE_CREATOR), 
						Integer.valueOf(rs.getString(TMOVIE_DURATION)), 
						Short.valueOf(rs.getString(TMOVIE_YEAR)));
				
				movie.setId(Integer.valueOf(rs.getString(TMOVIE_ID)));
				movie.setViewed(getMovieViewed(preparedStatement, 
						connection, 
						Integer.valueOf(rs.getString(TMOVIE_ID))));
				movies.add(movie);
			}
		}catch (SQLException e) {
			// TODO: handle exception
		}
		return movies;
	}
	
	private boolean getMovieViewed(PreparedStatement preparedStatement, Connection connection, int id_movie) {
		boolean viewed = false;
		String query = "Select *from " + TVIEWED +
				" WHERE " + TVIEWED_IDMATERIAL + "= ?"  +
				" AND " + TVIEWED_IDELEMENT + "= ?" +
				" AND " + TVIEWED_IDUSUARIO + "= ?";
		
		ResultSet rs = null;
		try {
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, ID_TMATERIALS[0]);
			preparedStatement.setInt(2, id_movie);
			preparedStatement.setInt(3, TUSER_IDUSUARIO);
			
			rs = preparedStatement.executeQuery();
			//si hay un datoo el valor a devolver ser谩 true
			viewed = rs.next();
		}catch (Exception e) {
			e.printStackTrace();
		}
		
		return viewed;
	}
	
	default boolean getViewDate(Date date, int idMovie) {
		SimpleDateFormat df = new SimpleDateFormat("yyy-MM-dd");
		String dateString = df.format(date);
		boolean viewDate = false;
			String query = "Select " + TVIEWED_DATE + " FROM " + TVIEWED +
					" Where " + TVIEWED_DATE + "= ?" +
					" And " + TVIEWED_IDELEMENT + "=?";			
			ResultSet rs = null;
			try(Connection connection = connectTODB()) {				
				PreparedStatement pst = (PreparedStatement) connection.prepareStatement(query);
				pst.setString(1, dateString);
				pst.setInt(2, idMovie);
				
				rs = pst.executeQuery();
				viewDate = rs.next();
			}catch (SQLException e) {
				// TODO: handle exception
			}										
		return viewDate;
	}
	
}

La clase Main en el m茅todo public static void makeReport(Date date) qued贸 de la siguiente manera

public static void makeReport(Date date) {
		SimpleDateFormat df = new SimpleDateFormat("yyy-MM-dd-h-m-s-S");
		String dateString = df.format(date);
		Report report = new Report();

		report.setNameFile("reporte" + dateString);
		report.setTitle("::VISTOS::");
		report.setExtention("txt");
		String ContentReport = "";
		for (Movie movie : movies) {
			if (movie.getIsViewed()) {
				if	(movie.getViewDate(date, movie.getId())) {
				ContentReport += movie.toString() + "\n";
			}
		  }
		}

		for (Books books2 : books) {
			if (books2.getReaded()) {
				ContentReport += books2.toString() + "\n";
			}
		}

		for (Serie serie : series) {
			ArrayList<Chapter> chapters = serie.getChapter();
			for (Chapter chapter : chapters) {
				if (chapter.getIsViewed()) {
					ContentReport += chapter.toString() + "\n";
				}
			}
		}
		report.setContent(ContentReport);
		report.makeReport();
		System.out.println("Reporte generado");
		System.out.println("");
	}

Muy buena explicaci贸n de base de datos en java.

ann nos pide agregar la fecha y hora y minuto, (me sobra el segundo), usando phpmyadmin directamente en la tabla viewed utilic茅 :
ALTER TABLE viewed ADD timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER id_user;

  • "ALTER TABLE viewed " modifica la tabla viewed
  • ADD timestamp NOT NULL : a帽adi茅ndole el campo timestamp y haci茅ndolo no nulo (que no queda en blanco) :
  • " DEFAULT CURRENT_TIMESTAMP " es el valor por defecto que se a帽adir谩 cuando se inserte o cree una l铆nea nueva a viewed. Algo anexo a esto es que tambi茅n se puede indicar al motor de db que sustituya el valor cuando se modifique esa l铆nea pero eso har铆a que cambiara la fecha de viewed.

Reto cumplido !!!

RETO.png

Hola a todos
hago recuento del codigo que utilice para el reto:

  1. utilice funci贸n de fecha para utilizar armar fecha actual鈥
public interface MovieDAO extends IDBConnnect {
	
	default  String  fechaToday() {
		
		 Date date = new Date();
		 DateFormat  formatDate  = new SimpleDateFormat("yyyy-MM-dd");
		 String fechaRegistro = formatDate.format(date);
		 //System.out.println("fecha registro: " + fechaRegistro);
		
		return  fechaRegistro;
		
	}
  1. se a帽ade el parametro de insercion de fecha en SetMovieViewed
default Movie setMovieViewed(Movie movie){

	 try(Connection connection = connectToDB()) {
		 
		 Statement statement  = connection.createStatement();
		 String query = "INSERT INTO " + TVIEWED +
				 "("+ TVIEWED_ID_MATERIAL + ", " + TVIEWED_ID_ELEMENT +
				 ", " + TVIEWED_ID_USER + ", " + TVIEWED_DATE_VIEWED + ")" + "VALUES("+ TMATERIAL_ID[0] +
				 ", " +  movie.getId() + ", " + TUSER_ID + ", '" + fechaToday() + "')";
		 
		// System.out.println("fecha registro: " + query.toString());
		 
	if (statement.executeUpdate(query) > 0) {
		
		System.out.println("se marco  en visto ");
		
	}
  1. se a帽ade tambien parametro de fecha con el llamado de funcion de fecha desde la funcion read() para que sea enviado desde setViewed();
 default ArrayList<Movie>  read(){
	 ArrayList<Movie> movies = new ArrayList<Movie>();
	 
	 try(Connection  connection = connectToDB()){
		 String query = "SELECT * FROM " + TMOVIE;
		 PreparedStatement preparedstatement = connection.prepareStatement(query);
		 ResultSet rs = preparedstatement.executeQuery();
		 while (rs.next()) {
			 
			 
			Movie movie = new Movie(
					rs.getString(TMOVIE_TITLE),
					rs.getString(TMOVIE_GENRE),
					rs.getString(TMOVIE_CREATOR),
					Integer.valueOf(rs.getString(TMOVIE_DURATION)),
					Short.valueOf(rs.getString(TMOVIE_YEAR)));
			movie.setId(Integer.valueOf(rs.getString(TMOVIE_ID)));
			movie.setViewed(getMovieViewed(preparedstatement, connection, Integer.valueOf(rs.getString(TMOVIE_ID)), fechaToday()));
			movies.add(movie);
			
		}


  1. Se a帽ade el parametro de fecha en la funcion getMovieViewed para la consulta de las movies vistas desde la fecha armada
private boolean getMovieViewed(PreparedStatement preparedstatement, Connection connection, int id_movie, String dateToday) {

	 boolean viewed = false;
	 
	 String query = "SELECT * FROM " + TVIEWED +
			 " WHERE " + TVIEWED_ID_MATERIAL + "= ?" + 
			 " AND " + TVIEWED_ID_ELEMENT + "= ?" +
			 " AND " + TVIEWED_ID_USER + "= ?" +
	 		 " AND " + TVIEWED_DATE_VIEWED + "= ?";
	 	
	 
	 ResultSet rs = null;
	 
	 try {
		 
		 preparedstatement = connection.prepareStatement(query);
		 preparedstatement.setInt(1, TMATERIAL_ID[0]);
		 preparedstatement.setInt(2, id_movie);
		 preparedstatement.setInt(3, TUSER_ID);
		 preparedstatement.setString(4, dateToday);
		 
		 
		 rs = preparedstatement.executeQuery();
		 viewed = rs.next();

5.habil铆to la fincion 鈥渕akeReport(Date date)鈥 con el parametro de fecha para hacer reporte de Movies viewed por fecha actual.

public static void makeReport(Date date) {
	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-h-m-s-S");
	String dateString = df.format(date);
	Report report = new Report();
	
	report.setNameFile("reporte" + dateString);
	report.setExtension("txt");
	report.setTitle(":: VISTOS ::");
	
	
	SimpleDateFormat dfNameDays = new SimpleDateFormat("E, W MMM Y");
	dateString = dfNameDays.format(date);
	String contentReport = "Date: " + dateString + "\n\n\n";
	
	for (Movie movie : movies) {
		if (movie.getIsViewed()) {
			contentReport += movie.toString() + "\n";
			
		}
	}


Genial.

Primero, se agreg贸 la columna date_added a la tabla viewed de tipo datetime.
Y se modifica lo siguiente:

DataBase.java (se agrega nueva constante para la columna)

public static final String TVIEWED_DATEADDED	= "date_added";	

MovieDAO.java (se sobrecarga el m茅todo read enviado par谩metro de fecha)

default ArrayList<Movie> read(Date date) {
	ArrayList<Movie> movies = new ArrayList();
	String dateFormat = new SimpleDateFormat("yyyy-MM-dd").format(date);
	try (Connection connection = connectToDB()){
		String query = "SELECT * FROM " + TVIEWED + " A " +
				" INNER JOIN  " + TMOVIE + " B ON a."+TVIEWED_IDELEMENT+" = b.id " +
				" WHERE a." + TVIEWED_IDMATERIAL +" = ?" +
				" AND "+ TVIEWED_IDUSUARIO + " = ?" +
				" AND DATE(a."+TVIEWED_DATEADDED+") = '" + dateFormat + "';";

		PreparedStatement preparedStatement = connection.prepareStatement(query);
		preparedStatement.setInt(1, ID_TMATERIALS[0]);
		preparedStatement.setInt(2, TUSER_IDUSUARIO);
		
		ResultSet rs = preparedStatement.executeQuery();			
		
		while (rs.next()) {
			Movie movie = new Movie(
					rs.getString(TMOVIE_TITLE), 
					rs.getString(TMOVIE_GENRE),
					rs.getString(TMOVIE_CREATOR),
					Integer.valueOf(rs.getString(TMOVIE_DURATION)),
					Short.valueOf(rs.getString(TMOVIE_YEAR))
					);
			movie.setId(Integer.valueOf(rs.getString(TMOVIE_ID)));
			movie.setViewed(true);
			movies.add(movie);
		}
		
	} catch (Exception e) {
		// TODO: handle exception
	}
	return movies;
}	

Movie.java (se crea nuevo m茅todo para devolver lista de movies vistos)

public static ArrayList<Movie> makeViewedMoviesList(Date date) {
	
	Movie movie = new Movie();
			
	return movie.read(date);
}

Main.java (se modifica para agregar llamado al nuevo m茅todo makeViewedMoviesList)

public static void makeReport(Date date)  {
	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-h-m-s-S");
	String dateString = df.format(date);
	Report report = new Report();
	
	report.setNameFile("reporte" + dateString);
	report.setExtension("txt");
	report.setTitle(":: VISTOS ::");
	
	
	SimpleDateFormat dfNameDays = new SimpleDateFormat("E, W MMM Y");
	dateString = dfNameDays.format(date);
	String contentReport = "Date: " + dateString + "\n\n\n";
	
	ArrayList<Movie> moviesViewed= new ArrayList<>();
	moviesViewed = Movie.makeViewedMoviesList(date);
	
	for (Movie movie : moviesViewed) {
		contentReport += movie.toString() + "\n";
		
	}
	...
	report.setContent(contentReport);
	report.makeReport();
	
	System.out.println("Reporte Generado");
	System.out.println();	
	
}

buen curso reto cumplido