日期与时间

Calendar类

Java中处理日期和时间,Calendar类是比较重要的角色之一,它定义在在java.util包。获取Calendar对象时,可以使用一些静态方法,如:

  • getInstance()
  • getInstance​(Locale aLocale)
  • getInstance​(TimeZone zone)
  • getInstance​(TimeZone zone, Locale aLocale)

获取Calendar对象后,可以使用get()方法获取相应的日期和时间数据,方法需要一个参数,用于标识获取的数据项,它们定义为Calendar类的静态字段,如:

  • YEAR,年份。
  • MONTH,月份。
  • DATE和DAY_OF_MONTH,返回月中的第几天。
  • HOUR,12小时制的小时数。
  • HOUR_OF_DAY,24小时制的小时数。
  • MINUTE,分。
  • SECOND,秒。
  • MILLISECOND,毫秒。
  • DAY_OF_WEEK,一周中的第几天。
  • DAY_OF_YEAR ,一年中的第几天。
  • WEEK_OF_MONTH,月中的第几周。
  • WEEK_OF_YEAR,年中的第几周。
  • ZONE_OFFSET ,当前时区与GMT相差的毫秒数。

下面的代码演示了其中一些标识的应用。

Java
import java.util.Calendar;
public class Hello {
	public static void main(String[] args) {
		Calendar cale = Calendar.getInstance();
		System.out.println(cale.get(Calendar.YEAR));
		System.out.println(cale.get(Calendar.MONTH));
		System.out.println(cale.get(Calendar.DATE));
		System.out.println(cale.get(Calendar.HOUR_OF_DAY));
		System.out.println(cale.get(Calendar.MINUTE));
		System.out.println(cale.get(Calendar.SECOND));
		System.out.println(cale.get(Calendar.MILLISECOND));
	}
}

执行代码会显示系统当前日期和时间信息。这里需要注意的是,处理月份时,是从0开始的,即0表示1月、1表示2月,以此类推。

需要自定义日期和时间数据时,可以使用一系列set()方法,主要包括:

  • 三个参数,分别指定年、月、日。注意月份中,0表示1月。
  • 五个参数,分别指定年、月、日、时、分。
  • 六个参数,分别指定年、月、日、时、分、秒。

下面的代码演示了set()方法的应用。

Java
import java.util.Calendar;
public class Hello {
	public static void main(String[] args) {
		Calendar cale = Calendar.getInstance();
		cale.set(2019,7,7,4,35,36);
		System.out.println(cale.get(Calendar.YEAR));
		System.out.println(cale.get(Calendar.MONTH));
		System.out.println(cale.get(Calendar.DATE));
		System.out.println(cale.get(Calendar.HOUR_OF_DAY));
		System.out.println(cale.get(Calendar.MINUTE));
		System.out.println(cale.get(Calendar.SECOND));
		System.out.println(cale.get(Calendar.MILLISECOND));
	}
}

代码执行结果如下图。

需要获取时间早些或晚些时间时,可以使用add()方法,其参数一指定运算的类型,如Calendar.YEAR表示对年份进行计算,参数二指定运算数,正数表示向后推算,负数表示向前推算。如下面的代码就是计算指定时间5天后的时间。

Java
import java.util.Calendar;
public class Hello {
	public static void main(String[] args) {
		Calendar cale = Calendar.getInstance();
		cale.set(2019,7,7);
		cale.add(Calendar.DAY_OF_MONTH, 5);
		System.out.println(cale.get(Calendar.YEAR));
		System.out.println(cale.get(Calendar.MONTH));
		System.out.println(cale.get(Calendar.DATE));
	}
}

代码执行结果如下图。

TimeZone类

TimeZone类用于处理时区信息,下面的代码演示了如何获取计算机的时区信息。

Java
import java.util.TimeZone;
public class Hello {
	public static void main(String[] args) {
		TimeZone tz = TimeZone.getDefault(); 
		System.out.println(tz.getDisplayName());
		System.out.println(tz.getID());
		System.out.println(tz.getRawOffset());
	}
}

我的计算设置为北京时间,代码执行结果如下图。

本例分别显示了时区名称和ID,以及时区时间与格林尼治时间的相差的毫秒数。

Locale类

Locale类用于处理地区信息,其中定义了一些表示国家和地区信息的字段,如Locale.CHINA表示中国,下面的代码显示Locale类的应用。

Java
import java.util.Locale;
public class Hello {
	public static void main(String[] args) {
		Locale cn = Locale.CHINA;
		System.out.println(cn.toLanguageTag());
	}
}

代码执行结果如下图。

通过Locale对象,还可以获取相应的格式输出,如下面的代码,会将数字以人民币的格式显示。

Java
import java.text.NumberFormat;
import java.util.Locale;
public class Hello {
	public static void main(String[] args) {
		Locale cn = Locale.CHINA;
		NumberFormat nf = NumberFormat.getCurrencyInstance(cn);
		System.out.println(nf.format(123.58));
	}
}

代码执行结果如下图。

综合应用

根据当前系统设置,可以通过Calendar类的getInstance()方法获取相应时区的地区的时间,如下面的代码。

Java
import java.util.Calendar;
import java.util.TimeZone;
public class Hello {
	public static void main(String[] args) {
		TimeZone tz = TimeZone.getTimeZone("GMT");
		Calendar cale = Calendar.getInstance(tz);
		System.out.println(cale.get(Calendar.YEAR));
		System.out.println(cale.get(Calendar.MONTH));
		System.out.println(cale.get(Calendar.DATE));
		System.out.println(cale.get(Calendar.HOUR_OF_DAY));
		System.out.println(cale.get(Calendar.MINUTE));
		System.out.println(cale.get(Calendar.SECOND));
	}
}

执行代码会显示计算机时间对应的格林尼治标准时间,如果计算机设置的是北京时间,则显示的时间会少了8小时。

本站内容均为原创作品,转载请注明出处,本页面网址为:http://caohuayu.com/chy/article/Article.aspx?code=cc001015