Si desea que su código sea conciso, pruebe este uso avanzado de la clase SimpleDateFormat

Este artículo se comparte desde la comunidad de Huawei Cloud " De principiante a maestro: uso avanzado de la clase SimpleDateFormat para simplificar su código". ", autor: bacteria insecto.

Descripción del entorno: Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

@[toc]

Prefacio

La fecha y la hora son requisitos muy comunes en el desarrollo, especialmente cuando se trata de lógica empresarial relacionada con el tiempo, necesitamos formatear, comparar y otras operaciones en fecha y hora. En Java, podemos usar SimpleDateFormatclases para realizar cómodamente operaciones de análisis y formateo de fecha y hora.

Este artículo presentará SimpleDateFormatel uso avanzado de la clase, con el objetivo de permitir a los lectores comprender mejor el uso de esta clase y hacer que el código sea más conciso.

Resumen

En este artículo, presentaremos los siguientes aspectos:

  1. SimpleDateFormatDescripción general y usos comunes de las clases.
  2. SimpleDateFormatUso avanzado de clase
  3. Implementación de código y casos de prueba.
  4. Resumen y conclusión

Clase SimpleDateFormat

Descripción general

SimpleDateFormatClass es una clase en Java que se utiliza para formatear y analizar fechas y horas. Proporciona una serie de métodos de construcción y cadenas de formato, lo que nos permite formatear y analizar fácilmente la fecha y la hora.

Ventajas y desventajas

SimpleDateFormatEs una clase utilizada para formatear fechas y horas en Java, hereda de la clase DateFormat y es una clase insegura para subprocesos.

ventaja:

  1. Simple y fácil de usar, puede formatear rápidamente fechas en formatos específicos y convertir cadenas en objetos de fecha correspondientes.
  2. El formato de fecha se puede personalizar y se admiten múltiples formatos predefinidos.
  3. Se puede utilizar para operaciones de formato y análisis de fechas.

defecto:

  1. SimpleDateFormatNo es seguro para subprocesos y no es adecuado para su uso en entornos de subprocesos múltiples.
  2. Para algunos formatos de fecha, como año, mes, día, hora, minuto, segundo y milisegundo, es necesario utilizar algunos caracteres específicos para representarlos, y estos caracteres tienen cierto grado de dificultad y complejidad.

Escenarios de aplicación

SimpleDateFormatAdecuado para escenarios de análisis y formato de fechas, como registros, operaciones de bases de datos, comercio electrónico y otros campos. Por ejemplo, puede convertir una marca de tiempo en una cadena de fecha en un formato específico o analizar una cadena de fecha en un objeto de fecha correspondiente. Pero tenga en cuenta que, dado SimpleDateFormatque no es seguro para subprocesos, debe sincronizarlo cuando lo use en un entorno de subprocesos múltiples o usar una alternativa segura para subprocesos como la Joda-Timede la biblioteca DateTimeFormatter.

Análisis de código fuente

SimpleDateFormatEs una clase de formato de hora clásica en Java, que puede convertir la hora en una cadena en un formato específico y también puede convertir una cadena en una hora en un formato específico.

Entre ellos SimpleDateFormat, el código fuente de la clase es más complicado porque implica mucho tiempo para las reglas de formato. Aquí sólo analizamos brevemente su principio de implementación.

1. Constructor

SimpleDateFormatLas clases tienen múltiples constructores, de los cuales los dos siguientes son los más utilizados:

público SimpleDateFormat (patrón de cadena) 
público SimpleDateFormat (patrón de cadena, configuración regional)

El parámetro del primer constructor es la plantilla de formato de hora, es decir, el formato de la cadena de hora. El segundo constructor puede especificar información de ubicación geográfica.

2. Formatear la hora

SimpleDateFormatEl método principal de la clase para formatear la hora en una cadena es format(). Este método recibe un parámetro de tipo Fecha y devuelve una cadena de hora formateada.

3. Tiempo de análisis

SimpleDateFormatEl método principal de la clase para analizar una cadena en una hora es parse()que este método recibe una cadena de hora como parámetro y devuelve un objeto de fecha de tipo Fecha.

4. Seguridad del hilo

SimpleDateFormatLa clase no es segura para subprocesos porque su estado interno puede ser modificado por varios subprocesos simultáneamente. Si desea utilizarlo en un entorno de subprocesos múltiples, puede utilizarlo ThreadLocalpara lograr el aislamiento de subprocesos.

En general, SimpleDateFormatla clase es una clase de formato de tiempo muy utilizada en Java, que puede convertir fácilmente el tiempo en una cadena en un formato específico y también puede analizar una cadena en tiempo. Al usarlo, debes prestar atención a la seguridad de sus hilos.

Uso común

A continuación se muestran SimpleDateFormatalgunos usos comunes de las clases:

1. Formatear fecha y hora

Los métodos de la clase SimpleDateFormat format()pueden formatear la fecha y la hora según el formato especificado. Por ejemplo:

paquete com.demo.javase.day53; 

importar java.text.SimpleDateFormat; 
importar java.util.Fecha; 

/** 
 * @author bug菌
 * @date 2023/10/17 19:17 
 */ 
public class SimpleDateFormatTest { 

    //格式化日期时间
    public static void testFormat(){ 
        SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-dd HH:mm:ss"); 
        Cadena dateStr = sdf.format(nueva fecha()); 
        System.out.println(fechaStr); 
    } 

    public static void main(String[] args) { 
        testFormat(); 
    } 
}

El código anterior formatea la hora actual en el formato "aaaa-MM-dd HH:mm:ss" y la genera.

El resultado es el siguiente:

2023-10-17 19:21:45

La captura de pantalla del resultado de la ejecución es la siguiente:

2. Analizar fecha y hora

SimpleDateFormatLos métodos de la clase parse()pueden analizar cadenas en un formato específico en objetos Date. Por ejemplo:

//解析日期时间
    public static void testParse() lanza ParseException { 
        SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-dd"); 
        Fecha fecha = sdf.parse("2023-10-17"); 
        System.out.println(fecha); 
    } 

    public static void main(String[] args) lanza ParseException { 
        testParse(); 
    }

El código anterior analiza la cadena "2021-08-01" en un objeto Fecha y lo genera. El resultado es el siguiente:

Martes 17 de octubre 00:00:00 CST 2023

La captura de pantalla del resultado de la ejecución es la siguiente:

3. Establecer zona horaria

Los métodos de la clase SimpleDateFormat setTimeZone()pueden establecer la zona horaria. Por ejemplo:

//设置区时
    public static void testSetTimeZone(){ 
        SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-dd HH:mm:ss"); 
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); 
        Cadena dateStr = sdf.format(nueva fecha()); 
        System.out.println(fechaStr); 
    } 

    public static void main(String[] args) lanza ParseException { 
        testSetTimeZone(); 
    }

El código anterior establece la zona horaria GMT+8y formatea la hora actual en el formato "aaaa-MM-dd HH:mm:ss" para la salida. El resultado es el siguiente:

2023-10-17 19:25:43

La captura de pantalla del resultado de la ejecución es la siguiente:

Uso avanzado

Además de los usos comunes anteriores, SimpleDateFormatla clase también tiene algunos usos avanzados que nos permiten formatear y analizar la fecha y la hora de manera más flexible.

1. Personajes de escape

SimpleDateFormatLa clase admite el uso de caracteres de escape para generar caracteres especiales. Por ejemplo:

//转义字符
    public static void testSimpleDateFormat(){ 
        SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-dd 'at' HH:mm:ss"); 
        Cadena dateStr = sdf.format(nueva fecha()); 
        System.out.println(fechaStr); 
    } 

    public static void main(String[] args) lanza ParseException { 
        testSimpleDateFormat(); 
    }

El código anterior utiliza comillas simples para encerrar "en" para indicar el carácter de salida "en". El resultado es el siguiente:

2023-10-17 a las 19:27:24

La captura de pantalla del resultado de la ejecución es la siguiente:

2. Formato de números

SimpleDateFormatLa clase admite el uso de "#" y "0" para formatear números. Entre ellos, "#" indica dígitos opcionales y "0" indica que los dígitos que faltan se completan con 0. Por ejemplo:

//数字格式化
    public static void testSimpleDateFormat_1(){ 
        SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-dd HH:mm:ss.SSS"); 
        Cadena dateStr = sdf.format(nueva fecha()); 
        System.out.println(fechaStr); 
    } 

    public static void main(String[] args) lanza ParseException { 
        testSimpleDateFormat_1(); 
    }

El código anterior formatea la hora actual en el formato "aaaa-MM-dd HH:mm:ss.SSS" y la genera. El resultado es el siguiente:

2023-10-17 19:28:31.478

La captura de pantalla del resultado de la ejecución es la siguiente:

3. Modo de formato

SimpleDateFormatLa clase admite el uso de patrones de formato para generar la fecha y la hora. El patrón de formato consta de fecha y hora, que se pueden combinar libremente. Los modos de formato de fecha incluyen "y", "M", "d", "E", etc., que representan respectivamente el año, mes, día, día de la semana, etc. Los modos de formato de hora incluyen "H", "m", "s", "S", etc., que representan respectivamente horas, minutos, segundos, milisegundos, etc. Por ejemplo:

//格式化模式
    public static void testSimpleDateFormat_2() { 
        SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-dd E HH:mm:ss"); 
        Cadena dateStr = sdf.format(nueva fecha()); 
        System.out.println(fechaStr); 
    } 

    public static void main(String[] args) lanza ParseException { 
        testSimpleDateFormat_2(); 
    }

El código anterior formatea la hora actual en el formato "aaaa-MM-dd E HH:mm:ss" y la genera. El resultado es el siguiente:

2023-10-17 martes 19:29:42

La captura de pantalla del resultado de la ejecución es la siguiente:

caso de prueba

ejemplo de código

El siguiente es SimpleDateFormatun código de muestra y casos de prueba para usar la clase:

paquete com.demo.javase.day53; 

importar java.text.SimpleDateFormat; 
importar java.util.Date; 
importar java.util.TimeZone; 

/** 
 * @author bugbug 
 * @date 2023/10/17 19:17 * 
 / 
public class SimpleDateFormatDemo { 

    public static void main(String[] args) throws Exception { 
        // Formatear fecha y hora 
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        String dateStr1 = sdf1.format ( new Date()); 
        System.out.println(dateStr1); 

        // Analizar fecha y hora 
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); 
        Fecha date2 = sdf2.parse("2023-10-17" ); 
        System.out.println(date2); 

        // Establecer zona horaria 
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        sdf3.setTimeZone(TimeZone.getTimeZone("GMT+8") ) ; 
        String dateStr3 = sdf3.format(new Date()); 
        System.out.println(dateStr3); 

        // Caracteres de escape 
        SimpleDateFormat sdf4 = new SimpleDateFormat("aaaa-MM-dd 'at' HH:mm:ss") ; 
        String dateStr4 = sdf4.format(new Date()); 
        System.out.println(dateStr4); 

        // Formato de números 
        SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); 
        String dateStr5 = sdf5.format(new Date()); 
        System.out.println(dateStr5); 

        // Modo de formato 
        SimpleDateFormat sdf6 = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss"); 
        String dateStr6 = sdf6 .format(nueva fecha()); 
        System.out.println(dateStr6); 
    } 
}

Análisis de código

Para el código del caso de prueba anterior, le mostraré cómo usar SimpleDateFormatclases en Java para formatear y analizar fechas. Los detalles son los siguientes:

Formatear fecha y hora

SimpleDateFormatEl método utilizado format()es formatear la hora actual y generar la hora en el formato especificado.

Analizar fecha y hora

Utilice el parse()método SimpleDateFormat para convertir una cadena en una fecha de tipo Fecha.

Establecer zona horaria

Utilice el setTimeZone()método SimpleDateFormat para configurar la zona horaria y cambiar la zona horaria predeterminada a GMT+8.

Personaje de escape

Utilice comillas simples y dobles para encerrar caracteres, lo que indica que no es necesario formatear esta parte del contenido.

Formato de números

Agregue milisegundos a la fecha formateada.

Modo de formato

Utilice SimpleDateFormatel modo de formato definido para generar la fecha, el día de la semana y la hora en el formato especificado.

En general, SimpleDateFormates excelente para manejar conversiones de formatos de fecha regulares y cálculos de fecha simples. Pero debe tenerse en cuenta que no es seguro para subprocesos: si se usa en un entorno de subprocesos múltiples, debe sincronizarse o usarse para ThreadLocalimplementar variables locales de subprocesos.

ejecución de pruebas

El resultado es el siguiente:

2023-10-17 19:31:16
martes 17 de octubre 00:00:00 CST 2023
2023-10-17 19:31:16
2023-10-17 a las 19:31:16
2023/10/17 19:31: 16.783
2023-10-17 Martes 19:31:16\

La captura de pantalla del resultado de la ejecución es la siguiente:

resumen

Este artículo presenta a los lectores SimpleDateFormatla descripción general y el uso común de las clases, así como algunos usos avanzados. Al estudiar este artículo, los lectores podrán dominar mejor SimpleDateFormatel uso de las clases y hacer que el código sea más conciso.

Código fuente del apéndice

Todos los códigos fuente mencionados anteriormente se han cargado y sincronizado en "Gitee" , lo que brinda a los estudiantes un aprendizaje de referencia personalizado para ayudarlos a dominarlo más rápidamente.

Resumir

En general, este artículo presenta SimpleDateFormatuna descripción general, el uso común y el uso avanzado de las clases de análisis y formato de fecha más utilizadas en Java, así como casos de prueba e implementaciones de código que utilizan esta clase. Entre ellos, el uso común incluye formatear la fecha y la hora, analizar la fecha y la hora y configurar la zona horaria, mientras que el uso avanzado incluye caracteres de escape, formato de números y modos de formato.

Además, este artículo también menciona SimpleDateFormatlas ventajas, desventajas y escenarios de aplicación. Cabe señalar que, dado que SimpleDateFormates una clase insegura para subprocesos, debe sincronizarse en un entorno de subprocesos múltiples o utilizar una alternativa segura para subprocesos. Al estudiar este artículo, los lectores podrán dominar mejor SimpleDateFormatel uso de las clases y luego manejar la fecha y la hora de manera más flexible.

Haga clic para seguir y conocer las nuevas tecnologías de Huawei Cloud lo antes posible ~

Lei Jun: La versión oficial del nuevo sistema operativo de Xiaomi, ThePaper OS, ha sido empaquetada. Una ventana emergente en la página de lotería de la aplicación Gome insulta a su fundador. El gobierno de Estados Unidos restringe la exportación de la GPU NVIDIA H800 a China. La interfaz de Xiaomi ThePaper OS está expuesto. Un maestro usó Scratch para frotar el simulador RISC-V y se ejecutó con éxito. Kernel de Linux Escritorio remoto RustDesk 1.2.3 lanzado, soporte mejorado para Wayland Después de desconectar el receptor USB de Logitech, el kernel de Linux falló Revisión aguda de DHH de "herramientas de empaquetado ": no es necesario construir la interfaz en absoluto (Sin compilación) JetBrains lanza Writerside para crear documentación técnica Herramientas para Node.js 21 lanzadas oficialmente
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10120385
Recomendado
Clasificación