Herramientas java.util como Date, Calendar, GregorianCalendar, TimeZone, SimpleTimeZone, Locale

JDK8 Online Api Chinese Manual

JDK8 Online Api English Manual

Herramientas java.util como Date, Calendar, GregorianCalendar, TimeZone, SimpleTimeZone, Locale

Clase de fecha

   La clase Fecha encapsula la fecha y hora actuales. En comparación con la clase Date original definida en Java 1.0, la clase Date ha sufrido cambios esenciales. Cuando se lanzó Java 1.1, muchas de las funciones definidas por la clase Date original se movieron a las clases de clase Calendar y DateFormat. Por lo tanto, muchos métodos en la clase Date original en Java 1.0 han quedado en desuso. Para el nuevo código, no debe usar los métodos obsoletos de Java 1.0, estos métodos no se presentan aquí.
   La clase Date admite los siguientes constructores:

Date()
Date(long millisec)

   El primer constructor inicializa el objeto con la fecha y hora actuales. El segundo constructor acepta un parámetro que es igual al número de milisegundos desde la medianoche del 1 de enero de 1970. La Tabla 1 muestra los métodos definidos por la clase Fecha que aún se prefieren. La clase Date también implementa la interfaz Comparable.

Tabla 1 Métodos aún definidos en la clase Fecha
Método Descripción
booleano después (Fecha fecha) Devuelve verdadero si la fecha contenida en el objeto Fecha de la llamada es posterior a la fecha especificada por fecha; de lo contrario, devuelve falso
booleano antes (fecha fecha) Devuelve verdadero si la fecha contenida en el objeto Fecha de la llamada es anterior a la fecha especificada por fecha; de lo contrario, devuelve falso
Objeto clon () Copiar objeto Fecha de llamada
int compareTo (fecha fecha) Compare la fecha contenida en el objeto de llamada con la fecha especificada por fecha. Si los dos son iguales, devuelve 0; si el objeto que llama es anterior a la fecha, devuelve un valor negativo; si el objeto que llama es posterior a la fecha, devuelve una integridad
boolean igual (Fecha del objeto) Devuelve verdadero si la fecha y hora contenidas en el objeto Fecha de la llamada es la misma que la fecha y hora especificadas por fecha; de lo contrario, devuelve falso
Fecha estática desde (t instantánea) Devuelve el objeto de fecha correspondiente al objeto instantáneo pasado en t (nuevo en JDK8)
largo getTime () Devuelve el número de milisegundos que han transcurrido desde la medianoche del 1 de enero de 1970.
int hashCode () Devuelve el código hash del objeto que llama
nulo setTime (mucho tiempo) Establezca la fecha y la hora en el valor especificado por hora, la hora es el número de milisegundos que han transcurrido desde la medianoche del 1 de enero de 1970.
Instant toInstant () Devuelve el objeto Instant correspondiente al objeto Date que llama (nuevo en JDK8)
String toString () Convierta el objeto Fecha de llamada en una cadena y devuelva el resultado

   Al examinar la Tabla 1 se puede ver que la función Fecha, que todavía está a favor, no permite obtener un solo componente de fecha u hora. Como lo demuestra el siguiente bloqueo del programa, solo puede obtener la fecha y la hora en milisegundos, o devolver la representación de cadena predeterminada de la fecha y la hora a través del método toString (), o (a partir de JDK8) como un objeto instantáneo para obtener la fecha y la hora Para obtener información más detallada sobre la fecha y la hora, debe usar la clase Calendario.

//Show date and time using only Date methods.
import java.util.Date;
class DateDemo {
    public static void main(String[] args) {
        //Instantiate a Date object
        Date date = new Date();
        //display time and date using toString()
        System.out.println(date);
        //Display number of milliseconds since midnight,January 1,1970 GMT
        long msec = date.getTime();
        System.out.println("Milliseconds since Jan. 1,1970 GMT = "+msec);
        /**
         * 输出:
         * Sat Feb 08 15:23:47 CST 2020
         * Milliseconds since Jan. 1,1970 GMT = 1581146627936
         */
    }
}
Clase de calendario

   La clase abstracta Calendario proporciona un conjunto de métodos que permiten convertir el tiempo en forma de milisegundos en una gran cantidad de componentes de tiempo útiles. Algunos ejemplos de dicha información que se pueden proporcionar son años, meses, días, horas, minutos y segundos. Las subclases de calendario proporcionarán funciones para interpretar la información de tiempo de acuerdo con sus propias reglas. Este es un aspecto de la biblioteca de clases Java que nos permite escribir programas que se ejecutan en un entorno internacional. Un calendario de Gregorain de esta subclase.
   Tenga en cuenta que
   JDK8 define una nueva API de fecha y hora en java.time.
   La clase Calendar no proporciona un constructor público. La clase Calendar define varias variables de instancia protegidas. areFieldsSet es una variable booleana que indica si el componente de tiempo está configurado. fields es una matriz int, utilizada para ahorrar tiempo en componentes. isSet es una matriz booleana que indica si se establece un componente de tiempo específico. time es una variable entera larga utilizada para guardar la hora actual de este objeto. isTimeSet es una variable booleana que indica si la hora actual está configurada.

Tabla 2 Métodos comunes definidos por la clase Calendario
Método Descripción
resumen vacío agregar (int cual, int val) Agregue val al componente de hora o fecha especificado por el cual. Si desea realizar una operación de resta, puede agregar un valor negativo. que debe ser una de las variables de dominio definidas por la clase Calendar, como Calendar.HOUR
booleano después (Object calendarObj) Si la llamada al objeto Calendario contiene una fecha posterior a la fecha especificada por calendarObj, devuelve verdadero; de lo contrario, devuelve falso
booleano antes (Object calendarObj) Devuelve verdadero si la fecha contenida en la llamada al objeto Calendario es anterior a la fecha especificada por calendarObj; de lo contrario, devuelve falso
vacío final claro () Cero todos los componentes de tiempo contenidos en el objeto de llamada
nulo final claro (int cual) Borre el componente de tiempo especificado por el cual en el objeto de llamada a cero
Objeto clon () Devuelve una copia del objeto que llama
boolean igual (objeto clendarObj) Si la fecha contenida en la llamada al objeto Calendario es la misma que la fecha especificada por calendarObj, devuelve verdadero; de lo contrario, devuelve falso
int get (int calendarField) Devuelve el valor de un componente de tiempo en el objeto de llamada, que se especifica por calendarField. Los componentes que se pueden devolver incluyen Calendar.YEAR, Calendar.MONTH, Calendar.MINUTE, etc.
Locale static [] getAvailableLocales () Devuelve una matriz de objetos Locale, que contiene información sobre las regiones donde se puede usar el calendario.
Calendario estático getInstance () Objeto de calendario para la región y zona horaria predeterminadas
Calendario estático getInstance (TimeZone tz) El objeto Calendario se devuelve para la zona horaria especificada por tz. Usar región predeterminada
Calendario estático getInstance (configuración regional) El objeto Calendario se devuelve para el área especificada por la configuración regional. Usar zona horaria predeterminada
Calendario estático getInstance (TimeZone tz, Locale locale) Devuelve el objeto Calendario para la zona horaria especificada por tz y el área especificada por la configuración regional
Fecha final getTime () Devuelve el objeto Fecha al mismo tiempo que el objeto llamante
TimeZone getTimeZone () Devuelve la zona horaria del objeto que llama
final boolean isSet (int which) Devuelve verdadero si el componente de tiempo especificado está configurado; de lo contrario, devuelve falso
conjunto nulo (int cual, int val) En el objeto de llamada, establezca la fecha u hora especificada por el valor especificado por val. que debe ser una de las variables de dominio definidas por Calendar, como Calendar.HOUR
final void set(int year,int month,int dayOfMonth) 设置调用对象的各种日期和时间组成部分
final void set(int year,int month,int dayOfMonth,int hours,int minutes) 设置调用对象的各种日期和时间组成部分
final void set(int year,int month,int dayOfMonth,int hours,int minutes,int seconds) 设置调用对象的各种日期和时间组成部分
final void setTime(Date d) 设置调用对象的各种日期和时间组成部分。信息是从Date对象d中获取的
void setTimeZone(TimeZone tz) 将调用对象的时区设置为tz指定的时区
final Instant toInstant() 返回与调用Calendar实例对应的Instant对象(JDK8新增)

   Calendar类定义了以下int型常量,当获取或设置日历的组成部分时,需要用到这些常量,带有FOTMAT和STANDALONE后缀的都是JDK8新增的常量:

ALL_STYLES HOUR_OF_DAY PM
AM JANUARY SATURDAY
AM_PM JULY SECOND
APRIL JUNE SEPTEMBER
AUGUST LONG SHORT
DATE LONG_FORMAT SHORT_FORMAT
DAY_OF_MONTH LONG_STANDALONE SHORT_STANDALONE
DAY_OF_WEEK MARCH SUNDAY
DAY_OF_WEEK_IN_MONTH MAY THURSDAY
DAY_OF_YEAR MILLISECOND TUESDAY
DECEMEBER MINUTE UNDECIMBER
DST_OFFSET MONDAY WEDNESDAY
ERA MONTH WEEK_OF_MONTH
FEBRUARY NARROW_FORMAT WEEK_OF_YEAR
FIELD_COUNT NARROW_STANDALONE YEAR
FRIDAY NOVEMBER ZONE_OFFSET
HOUR OCTOBER

   下面的程序演示了Calendar类的一些方法:

//Demonstrate Calendar
import java.util.Calendar;
class CalendarDemo {
public static void main(String[] args) {
      String months[]={
              "Jan","Feb","Mar","Apr",
              "May","Jun","Jul","Aug",
              "Sep","Oct","Nov","Dec"
      };
      //Create a calendar initialized with the
      //current date and time int the default
      //locale and timezone.
      Calendar calendar = Calendar.getInstance();
      //Display current and date information.
      System.out.print("Date: ");
      System.out.print(months[calendar.get(Calendar.MONTH)]);
      System.out.print(" "+calendar.get(Calendar.DATE)+" ");
      System.out.println(calendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(calendar.get(Calendar.HOUR)+":");
      System.out.print(calendar.get(Calendar.MINUTE)+":");
      System.out.println(calendar.get(Calendar.SECOND));
      //Set the time and date information and display it.
      calendar.set(Calendar.HOUR,20);
      calendar.set(Calendar.MINUTE,20);
      calendar.set(calendar.SECOND,20);
      System.out.print("Updated time: ");
      System.out.print(calendar.get(Calendar.HOUR)+":");
      System.out.print(calendar.get(Calendar.MINUTE)+":");
      System.out.println(calendar.get(Calendar.SECOND));
      /**
       * 输出:
       * Date: Feb 8 2020
       * Time: 4:47:17
       * Updated time: 8:20:20
       */
  }
}
GregorianCalendar 类

   GregorainCalendar类是Calendar类的具体实现,实现了Gregorain日历。Calendar类的getInstance()方法通常会返回一个GregorainCalendar对象,这个对象使用默认地区和时区下的当前日期和时间进行初始化。
   GregorainCalendar定义了两个域变量:AD和BC。它们表示格林尼治日历定义的两个纪元。
   GregorainCalendar对象还有几个构造函数。默认构造函数GregorainCalendar()使用默认地区和时区下的当前日期和时间进行初始化。还有以下3个构造函数可以指定其他信息:

GregorainCalendar(int year,int month,int dayOfMonth)
GregorainCalendar(int year,int month,int dayOfMonth,int hours,int minutes)
GregorainCalendar(int year,int month,int dayOfMonth,int hours,int minutes,int seconds)

   所有这3个版本都设置年、月和日。其中,year指定了年。月是由month指定的,0表示1月。月份中的日期是由dayofMonth指定的。第1个版本中奖时间设置为午夜,第2个版本中还设置了小时和分钟,第3个版本添加了秒。
   可以通过指定地区和/或时区来构造GregorainCalendar对象。使用如下构造函数创建的对象,将使用指定时区和/或地区下的当前时间进行初始化:

GregorainCalendar(Locale locale)
GregorainCalendar(TimeZone timeZone)
GregorainCalendar(TimeZone timeZone,Locale locale)

   GregorainCalendar实现了Calendar中的所有抽象方法,另外还提供了一些附加方法,如isLeapYear(),该方法测试某年是否是闰年,形式如下:

boolean isLeapYear(int year)

   如果year是闰年,该方法就返回true;否则返回false。JDK8还添加了以下方法:fro()和toZoneDateTime(),用于支持新的日期和时间API;getCalendarType(),它将日历类型作为一个字符串返回,即"gregory"。
   下面的程序演示了GregorainCalendar类:

//Demonstrate GregorianCalendar类:
import java.util.Calendar;
import java.util.GregorianCalendar;
class GregorianCalendarDemo {
 public static void main(String[] args) {
      String months[]={
              "Jan","Feb","Mar","Apr",
              "May","Jun","Jul","Aug",
              "Sep","Oct","Nov","Dec"
      };
      int year;
      //Create a Gregorian calendar initialized
      //with the current date and time in the
      //default locale and timezone.
      GregorianCalendar gcalendar = new GregorianCalendar();
      //Display current time anf date information.
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" "+gcalendar.get(Calendar.DATE)+" ");
      System.out.println(year=gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR)+":");
      System.out.print(gcalendar.get(Calendar.MINUTE)+":");
      System.out.println(gcalendar.get(Calendar.SECOND));
      //Test if the current year is a leap year
      if(gcalendar.isLeapYear(year)){
          System.out.println("The current year is a leap year");
      }else{
          System.out.println("The current year is not a leap year");
      }
      /**
       * 输出:
       * Date: Feb 8 2020
       * Time: 5:23:12
       * The current year is a leap year
       */
  }
}
TimeZone 类

   另外一个与时间相关的类是TimeZone。TimeZone抽象类可以处理与格林尼治标准时间(Greenwich Mean Time,GMT)——也就是世界时间(Universal Time Coordinated,UTC)之间的时差。另外还能够计算夏令时。TimeZone只支持一个默认构造函数。

表3 TimeZone类定义的一些方法
方 法 描 述
Object clone() 返回特定于TimeZone的clone版本
static String[] getAvailableDs() 返回一个表示所有时区名称的String对象数组
static String[] getAvailableIDs(int timeDelta) 返回一个String对象数组,表示与GMT时差为timeDelta的所有时区名称
static TimeZone getDefault() 返回一个表示宿主计算机默认时区的TimeZone对象
String getID() 返回调用TimeZone对象的名称
abstract int getOffset(int era,int year,int month,int dayOfMonth,int dayOfWeek,int millisec) 返回计算当地时间时需要添加到GMT的时差,这个值会针对夏令时进行调整,该方法的参数表示日期和时间的组成部分
abstract int getRawOffset() 返回计算当地时间时需要添加到GMT的原始时差(使用毫秒表示),这个值不会针对夏令时进行调整
static TimeZone getTimeZone(String tzName) 为名为tzName的时区返回TimeZone对象
abstract boolean inDaylightTime(Date d) 如果日期d在调用对象的夏令时范围之内,就返回true;否则返回false
static void setDefault(TimeZone tz) 设置当前主机使用的默认时区,tz是将要使用的TimeZone对象的引用
void setID(String tzName) 将时区的名称(即时区的ID)设置为tzName指定的名称
abstract void setRawOffset(int millis) 以毫秒为单位设置与GMT之间的时差
ZoneId toZoneId() 将调用对象转换为ZoneId,并返回结果。ZoneId定义在java.time包中(JDK8新增)
abstract boolean useDaylightTime() 如果调用对象使用夏令时,就返回true;否则返回false
SimpleTimeZone 类

   SimpleTimeZone类是TimeZone的一个便利子类。它实现了TimeZone的抽象方法,并且可以操作Gregorian日历的时区,此外还能够计算夏令时。
   SimpleTimeZone类定义了4个构造函数,其中一个如下:

SimpleTimeZone(int timeDelta,String tzName)

   这个构造函数创建一个SimpleTimeZone对象,这个对象相对于格林尼治标准时间(GMT)的时差是timeDelta,时区名称为tzName。
   第2个SimpleTimeZone构造函数如下:

SimpleTimeZone(int timeDelta,String tzId,int dstMonth0,int dstDayInMonth0,int dstDay0,int time0,int dstMonth1,int dstDayInMonth1,int dstDay1,int time1)

   其中,相对于GMT的时差是由timeDelta指定的。时区名称是由tzID传入的。夏令时的开始时间是由参数dstMonth0,dstDayInMonth0,dstDay0和time0指定的。夏令时的结束时间是由参数dstMonth1、dstDayInMonth1、dstDay1和time1指定的。
   第3个SimpleTimeZone构造函数如下:

SimpleTimeZone(int timeDelta,String tzId,int dstMonth0,int dstDayInMonth0,int dstDay0,int time0,int dstMonth1,int dstDayInMonth1,int dstDay1,int time1,int dstDelta)

   其中,dstDelta是夏令时期间节约的毫秒数。
   第4个SimpleTimeZone构造函数如下:

SimpleTimeZone(int timeDelta,String tzId,int dstMonth0,int dstDayInMonth0,int dstDay0,int time0,int time0mode,int dstMonth1,int dstDayInMonth1,int dstDay1,int time1,int time1mode,int dstDelta)

   其中,time0mode指定了开始时间的模式,time1mode指定了结束时间的模式。有效的模式值包括:STANDARD_TIME、WALL_TIME、UTC_TIME
   时间模式指示如何解释时间。其他构造函数默认模式WALL_TIME。

Locale 类

   使用Locale类实例化的对象,用于描述地理或文化上的区域。Locale类是为数不多的几个类之一,使用这几个类可以编写能够在不同国际化环境中运行的Java程序。例如在不同的区域,用于显示日期、时间和数字的格式是不同的。
   国际化是一个很大的主题。但是,许多程序只需要处理基本问题,包括设置当前地区。
   Locale类定义了以下常量,对于应对大部分常见地区来说,这些常量是有用的:

CANADA GERMAN KOREAN
CANADA_FRENCH GERMANY PRC
CHINA ITALIAN SIMPLIFIED_CHINESE
CHINESE ITALY TAIWAN
ENGLISH JAPAN TRADITIONAL_CHINESE
FRANCE JAPANESE UK
FRENCH KOREA US

   例如,表达式Locale.CANADA是表示加拿大地区的Locale对象。
   Locale类的构造函数如下:

Locale(String language)
Locale(String language,String country)
Locale(String language,String country,String variant)

   这些构造函数用来构建表示特定语言以及特定国家(对于后面两个构造函数)的Locale对象。这些值必须包含标准语言和国家代码。辅助信息可以通过variant提供。
   Locale类定义了一些方法。其中最重要的方法之一是setDefault(),如下所示:

static void setDefault(Locale localeObj)

   下面是其他一些方法:

final String getDisplayCountry()
final String getDisplayLanguage()
final String getDisplayName()

   这些方法返回人类能够阅读的字符串,这些字符串用于显示国家的名称、语言的名称以及地区的完整描述。
   使用getDefault()方法可以获取默认地区,如下所示:

static Locale getDefault()

   JDK7对Locale类进行了重要升级、新的Locale类能够支持互联网工程任务组BCP47和Unicode技术标准35,其中前者定义了用来标识语言的标签,后者定义了地区数据标记语言。对BCP47和UTS35的支持导致为Locale类添加了几种特性,包括一些新方法和Locale.Builder类。在这些新特性中,新方法包括getScript()和toLanguageTag(),前者获取地区的脚本,后者获取包含地区语言标签的字符串。Locale.Builder类来构造Locale实例,确保地区说明被很好地根据BCP47定义的要求进行了形式化(Locale构造函数没有提供这一检查)。JDK8也为Locale类添加了一些方法,以支持筛选。扩展和查找等操作。
   Calendar和GregorianCalendar是以地区敏感方式使用的类的例子。DateFormat和SimpleDateFormat也依赖于地区。

发布了59 篇原创文章 · 获赞 20 · 访问量 3636

Supongo que te gusta

Origin blog.csdn.net/qq_34896730/article/details/104223282
Recomendado
Clasificación