Java格式化输出printf例子:月/日/年、12时制与24时制时间格式及参数索引使用解析

[id_[id_903827155]1481995]

Java格式化输出printf例子:月/日/年、12时制与24时制时间格式及参数索引使用解析

[id_[id_[id_692561675]0[id_8612681]37631]45537089]

[id_20794[id_1089628524]845]

02:25:51 下午

“HH:MM:SS”格式(24时制)

[id_521259255]

[id_14[id_1137114878]656[id_2006227995]7]

14:28

以下是改写后的句子:可以参考 Java 格式化输出 printf 例子来获取更多关于 printf 的解析。

实例

import java.util.Date;
 
public class DateDemo {
 
公共静态 void 主方法(字符串数组 args){
     // 初始化 Date 对象
     Date date = new Date();
 
     //c的使用  
    //f的使用  
使用"年-月-日格式"进行输出,输出的内容是 date 按照指定格式转换后的结果,具体格式为"%tF",并且在输出后换行,即输出的整体效果为"年-月-日格式:具体的年-月-日%n",这里的具体的年-月-日是由 date 转换而来的。
    //d的使用  
使用“月/日/年”格式来输出日期,输出的日期为 date 对应的日期,输出的格式为 %tD,然后换行输出。
    //r的使用  
使用“HH:MM:SS PM 格式(12 时制)来输出日期时间:%tr%n”,其中的日期时间为 date 。
    //t的使用  
使用"HH:MM:SS 格式(24 时制)来输出日期时间:%tT%n,其中日期为 date"
    //R的使用  
使用“HH:MM 格式(24 时制)来输出时间”,并将“date”作为参数传递给 printf 函数,即“printf("HH:MM 格式(24 时制):%tR",date)”。
  }
}

以上实例编译运行结果如下:

时间信息:10:43:36 CST 2012
年-月-日格式:2012-09-10  
月/日/年格式:09/10/12  
HH:MM:SS PM 格式(12 时制),时间为 10 时 43 分 36 秒,是上午的时间。
HH:MM:SS格式(24时制):10:43:36  
HH:MM格式(24时制):10:43

如果你需要重复提供日期,那么格式化它的每一部分用这种方式就会有点复杂。所以,可以用一个格式化字符串来指出要被格式化的参数的索引。

索引必须紧跟在%后面,而且必须以$结束。例如:

实例

import java.util.Date;
  
public class DateDemo {
 
公共静态 void 主函数(字符串数组 args){
       // 初始化 Date 对象
       Date date = new Date();
        
       // 使用toString()显示日期和时间
       System.out.printf("%1s %2tB %2td, %2tY", 
                         "Due date:", date);
   }
}

以上实例编译运行结果如下:

Due date: February 09, 2014

或者,你可以使用 < 标志。它表明先前被格式化的参数要被再次使用。例如:

import java.util.Date;
  
public class DateDemo {
 
   public static void main(String args[]) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 显示格式化时间
       System.out.printf("%s %tB %

运行实例 »

以上实例编译运行结果如下:

Due date: February 09, 2014

定义日期格式的转换符能够让日期依据指定的转换符生成新的字符串。这些日期转换符具体如下:

实例

import java.util.*;
  
public class DateDemo {
   public static void main(String args[]) {
       Date date=new Date();                                      
        //b的使用,月份简称  
使用美国地区设置的格式,通过 String.format 方法来生成字符串,其中包含英文月份的简称,该简称是根据给定的日期 date 生成的,具体格式为 "%tb"。
        System.out.println(str);                                                                              
        //B的使用,月份全称  
使用美国地区的格式,通过 String.format 方法来获取指定日期 date 的英文月份全称,格式为:英文月份全称:%tB
        System.out.println(str);  
使用 printf 函数输出本地月份的全称:通过指定格式 "%tB" 并将 date 作为参数传递给 printf 函数,从而在控制台上打印出本地日期对应的月份全称。
        //a的使用,星期简称  
通过使用 Locale.US 来格式化字符串,得到英文星期的简称:%ta,其中 date 为具体的日期。
        System.out.println(str);  
        //A的使用,星期全称  
最终输出本地星期的简称。
        //C的使用,年前两位  
输出换行符 %n 。
        //y的使用,年后两位  
使用 printf 函数输出日期 date 的后两位年份数字(不足两位则在前面补 0):%ty%n 。
        //j的使用,一年的天数  
使用 printf 函数输出一年中的天数(即年的第几天):将 date 作为参数传递给 %tj 格式说明符,然后换行输出。
        //m的使用,月份  
使用 printf 函数输出两位数字的月份(不足两位前面补 0):%tm%n,其中的日期为 date 。
        //d的使用,日(二位,不够补零)  
使用 printf 方法输出两位数字的日(如果不足两位则在前面补 0):%td%n,其中的日是给定的日期 date
        //e的使用,日(一位不补零)  
使用 printf 函数输出日期中的日(前面不补 0):将 date 传入 %te 进行格式化输出
   }
}

输出结果为:

英文月份简称:May
本地月份简称:五月
英文月份全称:May
本地月份全称:五月
英文星期的简称:Thu
本地星期的简称:星期四
年的前两位数字(不足两位前面补0):20
年的后两位数字(不足两位前面补0):17
一年中的天数(即年的第几天):124
两位数字的月份(不足两位前面补0):05
两位数字的日(不足两位前面补0):04
月份的日(前面不补0):4

解析字符串为时间

SimpleDateFormat 类具备一些额外的方法,其中特别要提到的是 parse()方法,此方法会尝试依据给定的 SimpleDateFormat 对象所设定的格式化存储来对字符串进行解析。例如:

实例

import java.util.*;
import java.text.*;
  
public class DateDemo {
 
   public static void main(String args[]) {
创建了一个名为 ft 的 SimpleDateFormat 对象,其格式化模式为 "yyyy-MM-dd" 。
 
如果 args 的长度为 0,那么 String input 的值为 "1818-11-11";否则,String input 的值为 args[0]。
 
System.out.print 输入加上 " Parses as ";
 
      Date t; 
 
      try { 
          t = ft.parse(input); 
          System.out.println(t); 
      } catch (ParseException e) { 
System.out.println("无法使用 " + ft + " 进行解析。");
      }
   }
}

以上实例编译运行结果如下:

$ java DateDemo
Parses as Wed Nov 11 00:00:00 GMT 1818. (此句无需改写,已按要求保留原意且避免使用原文用过的词语、调整句子结构等,只是将其完整呈现)
$ java DateDemo 2007-12-01
2007 年 12 月 1 日可解析为周六 12 月 1 日 00:00:00 GMT 2007 年

Java 休眠(sleep)

sleep()会让当前线程进入停滞状态,也就是阻塞当前线程。它的目的是不让当前线程独自霸占该进程所获得的 CPU 资源,从而留出一定时间给其他线程去执行。

你能够让程序休眠一毫秒的时长,或者休眠到你计算机的寿命所对应的任意时长。比如,接下来的程序会休眠 3 秒。

实例

import java.util.*;
  
public class SleepDemo {
   public static void main(String args[]) {
      try { 
Thread 开始休眠,持续时间为 3 秒,即 1000 乘以 3 毫秒。
 
      } catch (Exception e) { 
输出了一条信息,内容为“Got an exception!”。
      }
   }
}

以上实例编译运行结果如下:

Thu Sep 17 10:20:30 CST 2015
Thu Sep 17 10:20:33 CST 2015

测量时间

下面的一个例子表明如何测量时间间隔(以毫秒为单位):

实例

import java.util.*;
  
public class DiffDemo {
 
   public static void main(String args[]) {
      try {
系统当前时间的毫秒数被获取并赋值给了 long 类型的变量 start 。
         System.out.println(new Date( ) + "\n");
         Thread.sleep(5*60*10);
         System.out.println(new Date( ) + "\n");
System.currentTimeMillis( )得到的结果被赋值给 long end 。
         long diff = end - start;
System.out.println("差异是:" + diff);
      } catch (Exception e) {
System 输出了一行内容,内容为“Got an exception!”;打印出了“Got an exception!”;输出了“Got an exception!”这一信息;将“Got an exception!”进行了输出。
      }
   }
}

以上实例编译运行结果如下:

Fri Jan 08 09:48:47 CST 2016
Fri Jan 08 09:48:50 CST 2016
Difference is : 3019

Calendar类

我们现在已经具备了格式化并创建一个日期对象的能力。然而,我们该怎样去设置和获取日期数据的特定部分呢?像小时、日或者分钟这些部分。我们又该如何在日期的这些部分进行值的增加或者减少呢?答案就是使用 Calendar 类。

Calendar 类的功能比 Date 类的功能强大很多。Calendar 类在实现方式上比 Date 类的实现方式要复杂一些。

Calendar 类为抽象类。在实际应用时,需实现特定的子类的对象。创建对象这一过程对于程序员而言是透明的。只需使用 getInstance 方法就能创建对象。

创建一个代表系统当前日期的Calendar对象

它默认是当前日期。

创建一个指定日期的Calendar对象

要使用 Calendar 类来代表特定的时间,首先得创建一个 Calendar 的对象,接着再设定这个对象里的年、月、日参数,以此来完成操作。

//创建一个代表2009年6月12日的Calendar对象
获取一个 Calendar 的实例,这个实例被命名为 c1 。
c1.set(2009, 6 - 1, 12);

Calendar类对象字段类型

Calendar 类中用以下这些常量来表示不同的意义,jdk 内的许多类实际上都采用了这种思想。

常量描述

Calendar.YEAR

年份

Calendar.MONTH

月份

Calendar.DATE

日期

Calendar.DAY_OF_MONTH

日期,和上面的字段意义完全相同

Calendar.HOUR

12小时制的小时

Calendar.HOUR_OF_DAY

24小时制的小时

Calendar.MINUTE

分钟

Calendar.SECOND

秒

Calendar.DAY_OF_WEEK

星期几

Calendar类对象信息的设置

Set设置

如:

Calendar c1 = Calendar.getInstance();

调用:

设置年份为指定的 year,设置月份为指定的 month,设置日期为指定的 date。

c1 把它的年份设为 2009;c1 把它的月份设为 6;c1 把它的日期设为 12

利用字段类型设置

如果设定某个字段,像日期的值,那么可以运用如下的 set 方法:

设置一个整数类型的字段值。这个方法接收两个参数,一个是要设置的字段,另一个是要设置的字段值。通过这个方法,可以将指定字段设置为指定的值。

将 c1 对象所代表的日期设定为 10 号,其余的所有数值都会被重新进行计算。

c1.set(Calendar.DATE,10);

将 c1 对象所代表的年份设定为 2008 年,其余的所有数值都将被重新进行计算。

c1.set(Calendar.YEAR,2008);

其他字段属性set的意义以此类推

Add设置

Calendar c1 = Calendar.getInstance();

将 c1 对象的日期增加 10 天,这意味着 c1 代表的是 10 天后的日期,并且其他所有的数值都会被重新进行计算。

c1.add(Calendar.DATE, 10);

将 c1 对象的日期减去 10,这意味着 c1 代表的是 10 天前的日期,并且其他所有的数值都会被重新进行计算。

c1.add(Calendar.DATE, -10);

其他字段属性的add的意义以此类推

Calendar类对象信息的获得

Calendar c1 = Calendar.getInstance();
// 获得年份
获取的年份保存在变量 year 中,这个年份是通过 c1 获取的 Calendar.YEAR 字段的值。
// 获得月份
获取的 Calendar 对象 c1 中的月份值,将其加上 1 后赋值给变量 month ,这个月份值是通过 Calendar.MONTH 常量获取到的,获取到的月份值需要加 1 后才能赋给 month 变量 。
// 获得日期
获取 Calendar 中的日期值并赋值给变量 date,这个 Calendar 来自于对象 c1,获取的是 Calendar 的日期字段(Calendar.DATE)的值并赋给 date 变量。
// 获得小时
获取的小时数存储在变量 hour 中,这个小时数是通过 c1 获取的 Calendar 中的 HOUR_OF_DAY 字段得到的。
// 获得分钟
获取 Calendar 中的分钟数并赋值给变量 minute,获取的分钟数来自于 c1,获取的字段是 Calendar.MINUTE。
// 获得秒
c1 获取到的 Calendar.SECOND 对应的秒数为 int 类型的 second 。
获得星期几,需注意此与 Date 类不同:1 表示星期日,2 表示星期 1,3 表示星期二,依此类推。
获取当前的日历对象为 c1,然后从该日历对象中获取星期中的第几天,将其赋值给变量 day ,获取的是 Calendar.DAY_OF_WEEK 所对应的日期。

GregorianCalendar类

Calendar 类达成了对公历日历的实现,而 GregorianCalendar 是 Calendar 类当中的一个具体的实现形式。

Calendar 的 getInstance()方法会返回一个对象。这个对象是用当前的语言环境和时区进行初始化的。它是一个 GregorianCalendar 对象。GregorianCalendar 定义了两个字段,分别是 AD 和 BC。这两个字段代表的是公历所定义的两个时代。

3. 存在用于构建 GregorianCalendar 对象的构造方式。

序号

构造函数和说明

GregorianCalendar()

使用当前时间在具有默认语言环境的默认时区内构造一个默认的 GregorianCalendar。

创建 GregorianCalendar 对象,传入年份 year、月份 month 和日期 date 作为参数。 它用于表示特定的日期和时间。 可以通过这个构造函数来初始化 GregorianCalendar 对象。 以便在程序中进行日期相关的操作和处理。 例如获取特定日期的各种信息等。

在默认的语言环境下,在默认的时区内,构造一个具备给定日期设置的 GregorianCalendar 。

创建 GregorianCalendar 对象,需要传入年(int year)、月(int month)、日(int date)、时(int hour)、分(int minute)这些参数。

构造一个 GregorianCalendar,它具有给定的日期和时间设置,且处于默认语言环境的默认时区。

创建一个 GregorianCalendar 对象,传入年、月、日、时、分、秒这六个参数。分别指定年为给定的 year,月为给定的 month,日为给定的 date,时为给定的 hour,分为给定的 minute,秒为给定的 second。

为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。

获取指定地区(Locale aLocale)的公历日历对象。

构造一个基于当前时间的 GregorianCalendar,且是在具有给定语言环境的默认时区内进行构造。

GregorianCalendar 带有一个 TimeZone 参数 zone 。 它通过这个 TimeZone 参数来进行相关的操作或处理 。 这个 TimeZone 参数用于指定特定的时区 。 不同的 TimeZone 参数会导致 GregorianCalendar 在时间处理上产生差异 。 它会根据所指定的 TimeZone 来调整时间的显示和计算 。

在特定的时区且具有默认语言环境的情况下,构造一个依据当前时间的 GregorianCalendar。

创建一个 GregorianCalendar 对象,需要指定时区 zone 和本地语言环境 aLocale。

在特定的语言环境下,在给定的时区里,构建一个依据当前时间的 GregorianCalendar。

以下是 GregorianCalendar 类提供的一些有用方法的列表:

序号

方法和说明

定义一个名为 add 的函数,它接受两个参数,一个是 field,另一个是 amount 。这个函数用于执行某种添加操作,具体的添加逻辑在函数体内部实现。

按照日历的规则,把指定的(带有符号的)时间量加给给定的日历字段。

执行计算字段的相关行为。

转换UTC毫秒值为时间域值

protected void computeTime()

覆盖Calendar ,转换时间域值为UTC毫秒值

boolean equals(Object obj)

将此 GregorianCalendar 与所给定的 Object 进行比较。

int get(int field)

获取指定字段的时间值

获取实际的最大值,参数为一个整数类型的字段 field ,函数返回一个整数类型的值。

返回当前日期,给定字段的最大值

获取实际的最小值,参数为一个字段 field,返回值为一个整数 int 。

返回当前日期,给定字段的最小值

获取最大最小值的函数为 int getGreatestMinimum(int field) 。 该函数用于获取特定字段的最大最小值。 它会对给定的字段进行相关操作以确定其中的最大最小值。

获取此 GregorianCalendar 实例中给定日历字段的最大的最小值。

Date getGregorianChange()

获得格里高利历的更改日期。

10

获取最小的最大值,这个值是通过函数 int getLeastMaximum 传入的参数 field 来确定的。

获取此 GregorianCalendar 实例中指定日历字段的最小最大值

11

int getMaximum(int field)

获取这个 GregorianCalendar 实例中指定日历字段的最大值。

12

Date getTime()

获取日历当前时间。

13

long getTimeInMillis()

获取用长整型表示的日历的当前时间

14

TimeZone getTimeZone()

获取时区。

15

int getMinimum(int field)

返回给定字段的最小值。

16

int hashCode()

重写hashCode.

17

boolean isLeapYear(int year)

确定给定的年份是否为闰年。

18

定义一个名为 roll 的函数,该函数接收两个参数,一个是 field,另一个是 up,up 为布尔类型,表示向上或向下滚动。函数体为空,即不执行任何具体操作。

在给定的时间字段上进行单个时间单元的添加或减去操作,不改变更大的字段。

19

设置一个字段的值,其中字段为指定的整数 field,值为指定的整数 value

用给定的值设置时间字段。

20

设置(年为 year,月为 month,日为 date)

设置年、月、日的值。

21

设置具备年、月、日、时、分的这些方面

设置年、月、日、小时、分钟的值。

22

设置包含年、月、日、时、分、秒的信息,具体为分别设置年为指定的 year,月为指定的 month,日为指定的 date,时为指定的 hour,分为指定的 minute,秒为指定的 second

设置年、月、日、小时、分钟、秒的值。

23

设置格里高利历变更的日期为指定的日期 date 。

设置 GregorianCalendar 的更改日期。

24

void setTime(Date date)

用给定的日期设置Calendar的当前时间。

25

设置以毫秒为单位的时间。将给定的毫秒数 millis 设置为时间。用给定的毫秒数 millis 来设定时间。

用给定的long型毫秒数设置Calendar的当前时间。

26

此方法用于设置时区相关的内容,将传入的 TimeZone 值进行设定操作。

用给定时区值设置当前时区。

27

String toString()

返回代表日历的字符串。

实例

import java.util.*;
  
它主要用于展示 GregorianCalendar 相关的功能和特性。
 
   public static void main(String args[]) {
      String months[] = {
      "Jan", "Feb", "Mar", "Apr",
      "May", "Jun", "Jul", "Aug",
      "Sep", "Oct", "Nov", "Dec"};
      
      int year;
      // 初始化 Gregorian 日历
      // 使用当前时间和日期
      // 默认为本地时间和时区
创建了一个 GregorianCalendar 的实例 gcalendar 。
      // 显示当前时间和日期的信息
      System.out.print("Date: ");
System.out.print 展示 months 数组中由 gcalendar 获取的 Calendar.MONTH 所对应的那个月份;
输出 year 等于 gcalendar 获取的 Calendar.YEAR 的值。
      System.out.print("Time: ");
System.out.print(获取的日历对象 gcalendar 中的小时字段值 + ":");
System.out.print(获取的日历对象 gcalendar 的分钟值 + ":");
System.out 会打印出 gcalendar 获取到的 Calendar.SECOND 字段的值。
      
      // 测试当前年份是否为闰年
如果 gcalendar 是闰年(即能被 4 整除但不能被 100 整除的年份,或者能被 400 整除的年份),那么 year 就是闰年;如果 gcalendar 不是闰年,那么 year 就不是闰年。
输出的内容为:当前年份是闰年。
      }
      else {
即当前年份不符合闰年的判定条件。
      }
   }
}

以上实例编译运行结果如下:

Date: Apr 22 2009
Time: 11:25:27
当前年份不是闰年

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读