Este artículo comparte métodos comunes de operación de tiempo calendario, el contenido específico es el siguiente
package test;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/** * Common methods of Date and Calendar, many Date methods have been deprecated, so Calendar is the main one* * @author tuzongxun123 * */public class DateAndCalendarTest {public static void main(String[] args) {// Use directamente la fecha para obtener la hora actual del sistema, resultado: Tue 03 de mayo 08:25:44 CST 2016 Date Date = New Date (); // Muchos métodos en la fecha, como obtener un cierto año, mes, día, etc., y establecer un cierto año, mes, día, etc., ya no se recomiendan. // Se recomienda utilizar varios métodos de calendario, por lo que no se realizan registros // Obtenga los milisegundos de la fecha especificada, que a menudo se usa para comparar los tamaños de dos fechas. date.gettime (); // Use el calendario para obtener la hora actual del sistema. Debe obtener el objeto calendario y convertirlo en calendario de calendario de salida de fecha = calendario.getInstance (); // Este método es equivalente a obtener tiempo en la fecha, y obtener los milisegundos del calendario de tiempo actual.gettimeinmillis (); // Obtenga la fecha del primer día de la semana en la que está la fecha especificada. El primer día predeterminado de la semana es domingo calendario.getFirstdayOfweek (); // Devuelve el año en que la fecha del calendario actual es, como 2016calendar.get (1); // calendar se conecta hasta la fecha, resultado de salida: Tue 03 09:31:59 CST 2016 Date Date2 = calendario Año, mes y día, resultado de la salida: lun 03 de junio 09:31:59 CST 2013 // Métodos sobrecargados comúnmente utilizados: calendario.set (año, mes, fecha, hora del día, minuto); // calendar.set (año, mes, fecha, hora, hora, minuto, segundo); Todos los parámetros son intcalendar.set (2013, 5, 3); System.out.println(calendar.getTime());// Use Calendar to set year, output result: Fri Jun 03 09:42:43 CST 2011calendar.set(Calendar.YEAR, 2011);System.out.println(calendar.getTime());// Set the month with Calendar and numbers, note that the month starts at 0, representing January, output result: Mon Jan 03 09:45:32 CST 2011Calendar.set (calendario.month, 0); system.out.println (calendar.gettime ()); // Establezca el mes con calendario y sus propias constantes, tenga en cuenta que el mes comienza en 0, que representa en enero, resultado de la producción: Thu 03 09:47:07 CST 2011calendar. Calendar.FEBRUARY);System.out.println(calendar.getTime());// Set the day with Calendar and numbers, output result: Sat Feb 05 09:48:25 CST 2011// calendar.set(Calendar.DAY_OF_MONTH, 5) The result is the same;calendar.set(Calendar.DATE, 5); System.out.println (calendar.gettime ()); // establecer la hora calendar.set (calendar.hour, 15); system.out.println (calendar.gettime ()); // establecer calendario hora de acuerdo con el número de milisegundos calendar.setTimeinmillis (0); // fecha a la cadena, resultado de salida: resultado 2016-05-03-calendars calendar.setTimeinmillis (0); // fecha a la cadena, resultado de la serie: resultado de la producción: 2016-03-03-calendars calendar. 09: 25: 29String fordate = dataToString (new date ()); system.out.println (fordate); // cadena hasta la fecha, resultado de salida: thu 12 de noviembre 13:23:11 cst 2015date strdate = stringTodate ("2015-11-12 13:23:11"); System.out.Println (strdate); // date, resultado de la fecha: resultado de la salida: resultado de la salida: resultado de la fecha de salida: resultado de la fecha de salida: el resultado de la fecha de salida: el resultado de la fecha de la calificación de Cellendar); // 2015Calendar calendar2 = datTocalendar (strdate); system.out.println (calendar2.get (1));}/*** Convertir la hora de tipo de fecha especificada en una cadena en el formato especificado** @author: tuzongxun* @title: dataTostring* @param @param date* @return* @deturn* @Date 3, 2016, 2016, 2016, 2016:09:09:0 Am* @lanza*/static string dataToString (fecha de fecha) {string str = "yyyyy-mm-dd hh: mm: ss"; simpledateFormat format = new SimpleDateFormat (str); string dateFormat = format.format (fecha); return dateFormat;}/*** Vierte el string en el formato de fecha especificado a la fecha** @ @@author: @Title: stringTodate* @param @param String* @return void* @date el 3 de mayo de 2016 9:16:38 am* @lanza*/static date stringTodate (string string) {String str = "yyyyy-mm-dd hh: mm: ss"; SimpleDateFormat format = new simpledateFormat (str); fecha = neo neo (); pruebe {); prueba {); formato datTocalendar (fecha de fecha) {calendario calendario = calendar.getInstance (); calendar.setTime (fecha); return calendar;}}¿Qué otros trampas hay?
Donde esta el pozo:
En un proyecto que encontré antes, involucré una función: mover algunos datos a otra colección de bases de datos MongoDB todos los días, es decir, las tablas de la base de datos relacional. Este nombre de colección es un nombre fijo más el año y el mes en que se encuentra la fecha actual de hace dos meses.
Esta función existió antes de entrar en contacto con este proyecto, que es una función implementada por mis colegas anteriores, y escribió una tarea de sincronización de Java.
Ese colega ya no está en nuestra empresa, pero recientemente descubrió que esta función tiene algunos problemas. El movimiento de datos no es el esperado. Los datos que deberían haber existido en febrero aparecieron en la tabla de enero.
La raíz del pozo:
Los problemas relacionados con MongoDB son mantenidos temporalmente por mí, y este problema naturalmente necesita ser resuelto por mí, así que sacé su código y lo leí. Como resultado, se encontró que el problema era los métodos relevantes de calendario.
Para transferir datos de hace dos meses, primero debe obtener la fecha de hace dos meses. El código relevante para generar el nombre de la tabla es el siguiente:
cadena privada getDataCollectionName () {calendar calendar = calendar.getInstance (); intente {calendar.set (calendar.date, -day); return "alarm_" + toolUtils.datetoFormatStrdate (calendar.gettime (), "aaa yyy_mm"); } catch (Exception e) {logger.error ("{}: transformación de datos fallida, {}", this.getClass (). getName (), e.getMessage ()); } return null; }El problema radica en el método establecido de calendario, incluido el tiempo de inicio y finalización del uso de datos de consulta más adelante, y el mismo se usa es calendar.set (calendario.date, -day);
A primera vista, este método parece establecer la fecha en la fecha actual menos el número especificado de días, pero de hecho el resultado no es tan esperado como obtendría la fecha hace dos meses (el día aquí define 60, es decir, dos meses).
Complete el pozo:
Después de encontrar el motivo, reemplacé este método y cambié el conjunto para agregar. En cuanto a los parámetros en el interior, no se movió. El resultado demostró que este método realmente puede darse cuenta de la función actual, y el resultado obtenido es exactamente el resultado esperado.
Por supuesto, también puede cambiar ligeramente los parámetros sin cambiar el método, como calendar.set (calendar.date, calendar.get (calendar.date) -day);
Lo anterior se trata de este artículo, y espero que sea útil para todos dominar los métodos comunes de operación de tiempo calendario.