月/日/年格式及时间格式示例,Java 格式化输出 printf 用法详细解析
[id_8572[id_[id_109[id_572615804]06791]27[id_70071798]0784]519]

[id_133[id_322221521]87043]
[id_725244105]
02:25:51 下午
"HH:MM:SS"格式(24时制)
14:28:16
[id_1962054869]
14:28
[id_116[id_353223925]38663]
[id_1298417708]
public class DateDemo {
公共静态 void 主函数(字符串数组参数) {
// 初始化 Date 对象
Date date = new Date();
//c的使用
//f的使用
使用"年-月-日格式"进行输出,输出的内容是 date 按照特定格式的结果,具体格式为"%tF",并且在输出后换行,即输出"年-月-日格式:"加上 date 按照"%tF"格式转换后的结果,然后换行。
//d的使用
使用“月/日/年”格式来输出日期,输出的日期为 date 对应的日期,输出的格式为 %tD,并且换行输出。
//r的使用
使用"HH:MM:SS PM 格式(12 时制)来输出日期:%tr%n,其中的日期为 date"
//t的使用
使用“HH:MM:SS 格式(24 时制)来输出日期时间,输出的内容为 date 对应的时间,格式为 %tT,然后换行。”
//R的使用
使用"HH:MM 格式(24 时制)来输出日期时间:%tR",其中的日期时间为 date 所代表的内容。
}
}
如果你需要重复提供日期,那么格式化它的每一部分用这种方式就会有点复杂。所以,可以用一个格式化字符串来指出要被格式化的参数的索引。
索引必须紧跟在%后面,而且必须以$结束。例如:
import java.util.Date;
public class DateDemo {
主要的公共静态方法 main 带有字符串数组参数 args 。在程序的入口点,这个方法被调用以启动程序的执行。它是程序的主要入口,包含了程序的主要逻辑和操作。通过这个方法,可以访问命令行参数,并执行相应的程序逻辑。
// 初始化 Date 对象
Date date = new Date();
// 使用toString()显示日期和时间
System.out.printf 函数使用了两个占位符 %1$s 和 %2$tB、%2$td、%2$tY ,第一个占位符 %1$s 用于表示一个字符串,后面的三个占位符 %2$tB、%2$td、%2$tY 用于表示日期相关的信息,分别表示月份、日期和年份,并且这些日期信息是与第一个字符串相关联的。
"Due date:", date);
}
}
或者,你可以使用 < 标志。它表明先前被格式化的参数要被再次使用。例如:
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
// 初始化 Date 对象
Date date = new Date();
// 显示格式化时间
System.out.printf("%s %tB %
定义日期格式的转换符能够让日期借助指定的转换符生成新的字符串。这些日期转换符具体如下:
import java.util.*;
public class DateDemo {
public static void main(String[] args) {
Date date=new Date();
//b的使用,月份简称
使用 Locale.US 区域设置,通过 String.format 方法来格式化字符串,格式化的内容是英文月份简称,具体是将 date 作为参数传入,格式为"%tb"
System.out.println(str);
通过这种方式可以输出本地月份的简称。
//B的使用,月份全称
使用美国地区的语言环境格式化字符串,得到英文月份全称:date 对应的月份全称。具体为:String.format(Locale.US,"英文月份全称:%tB",date),即按照美国地区的规则,将 date 对应的月份以全称形式输出。
System.out.println(str);
使用 printf 函数输出本地月份的全称,参数为 date ,格式为 %tB ,并换行输出。
//a的使用,星期简称
通过使用 Locale.US 来格式化字符串,得到英文星期的简称:%ta 对应的具体内容,该内容是根据给定的 date 来确定的。
System.out.println(str);
//A的使用,星期全称
使用 printf 函数输出本地星期的简称,传入参数 date ,格式为 "%tA" ,并换行输出。
//C的使用,年前两位
使用 printf 函数输出年的前两位数字(若不足两位则在前面补 0):按照指定格式 %tC 输出 date 所代表的日期的年份部分;在输出时换行。
//y的使用,年后两位
使用 printf 函数输出日期 date 中年的后两位数字(如果不足两位则在前面补 0):%ty%n
//j的使用,一年的天数
//m的使用,月份
使用 printf 函数输出两位数字的月份(不足两位前面补 0):%tm%n,其中的日期为 date 。
//d的使用,日(二位,不够补零)
输出一个换行符 %n ;
//e的使用,日(一位不补零)
使用 printf 方法输出日期(月份的日,前面不补 0):%te,参数为 date
}
}
输出结果为:
解析字符串为时间
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("输入 " + input + " 解析为 ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("使用 " + ft + " 无法解析。");
}
}
}
以上实例编译运行结果如下
Java 休眠(sleep)
sleep()会让当前线程进入停滞状态,也就是阻塞当前线程。它的目的是不让当前线程独自霸占该进程所获得的 CPU 资源,从而留出一定时间给其他线程执行的机会,即让出 CPU 的使用。
例如:下面程序会休眠三秒
import java.util.*;
public class SleepDemo {
public static void main(String[] args) {
try {
输出换行符
Thread 进入休眠状态,休眠时间为 1000 乘以 3 毫秒;也就是休眠 3 秒。
} catch (Exception e) {
输出了一行文本,内容为“Got an exception!”。
}
}
}
以上实例编译运行结果如下:
测量时间
下面的一个例子表明如何测量时间间隔(以毫秒为单位):
import java.util.*;
public class DiffDemo {
public static void main(String[] args) {
try {
System.currentTimeMillis( ) 的结果被赋给了 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 会打印出 "Difference is : " 与 diff 拼接后的内容。
} catch (Exception e) {
System 输出了一行内容,内容为“Got an exception!”;输出了“Got an exception!”这一信息;打印出了“Got an exception!”;在控制台输出了“Got an exception!”;将“Got an exception!”进行了输出;输出了关于“Got an exception!”的内容;把“Got an exception!”进行了打印;输出了“Got an exception!”这个信息。
}
}
}
以上实例编译运行结果如下:
Calendar类
我们现在已经具备了格式化并创建一个日期对象的能力。然而,我们该怎样去设置和获取日期数据的特定部分呢?例如小时、日或者分钟等。同时,我们又该如何在日期的这些部分进行加值或减值操作呢?答案是利用 Calendar 类。
Calendar 类的功能比 Date 类的功能强大很多。Calendar 类在实现方式上比 Date 类的实现方式要复杂一些。
Calendar 类为抽象类。在实际运用中,需实现特定的子类的对象。创建对象这一过程对于程序员而言是透明的。只需运用 getInstance 方法进行创建即可。
创建一个代表系统当前日期的Calendar对象
c 表示的是默认的当前日期。
创建一个指定日期的Calendar对象
要使用 Calendar 类来代表特定的时间,首先得创建一个 Calendar 的对象,接着再设定这个对象里的年、月、日参数,以此来完成操作。
//创建一个代表2009年6月12日的Calendar对象
获取一个日历对象,该对象为当前的日历实例。
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();
调用:
将日期设置为指定的 date。
c1 设定其日期为 12 日。
利用字段类型设置
如果设定某个字段,比如日期的值,那么可以运用如下的 set 方法:
设置指定字段的值,该字段的索引为给定的整数 field,要设置的值为给定的整数 value。
将 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 的 get 方法并传入 Calendar.YEAR 这个参数得到的。
// 获得月份
获取 Calendar 中的月份值,将其加 1 后赋值给变量 month,即 month 等于 c1 获取的 Calendar.MONTH 值加 1 。
// 获得日期
获取 Calendar 中的日期值并赋值给变量 date,获取的日期值来自于 c1,获取的是 Calendar 中的日期字段 Calendar.DATE 的值
// 获得小时
c1 获取到的是 Calendar.HOUR_OF_DAY 这个字段,获取到的值被存储在 hour 这个整型变量中。
// 获得分钟
c1 获取到的分钟数被存储在变量 minute 中,这个分钟数是通过 Calendar.MINUTE 得到的。
// 获得秒
获取 Calendar 中的秒数并赋值给 second 变量,second 变量的类型为 int,获取的秒数来自 c1 这个对象的 Calendar.SECOND 属性。
获取星期几(需注意:此与 Date 类不同,1 表示星期日,2 表示星期 1,3 表示星期二,依此类推)
获取当前日期的星期几,将其存储在变量 day 中,通过 c1.get(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 实例,需要传入年、月、日、小时和分钟这几个参数,分别为 year、month、date、hour 和 minute
构造一个 GregorianCalendar,它具有给定的日期和时间设置,并且是为具有默认语言环境的默认时区而构造的。
创建一个 GregorianCalendar 对象,需要传入年、月、日、时、分、秒这六个参数,分别对应 int 类型的 year、month、date、hour、minute、second 。
为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。
获取指定地区(Locale aLocale)的格里高利历(GregorianCalendar)。
在默认的具有给定语言环境的时区内构建一个依据当前时间的 GregorianCalendar。
GregorianCalendar 带有一个 TimeZone 类型的参数 zone 。
在特定的时区且具有默认语言环境的情况下,构造一个依据当前时间的 GregorianCalendar。
创建 GregorianCalendar 对象,需要指定时区 zone 和地区 locale。它通过传入的时区和地区信息来初始化该日历对象。
在特定语言环境的特定时区中构建一个依据当前时间的 GregorianCalendar。
5. 格式化日期和时间的方法。
序号
方法和说明
定义一个函数用于添加,其中包含一个整数类型的字段参数和一个整数类型的数量参数。 这个函数的功能是进行添加操作,将指定数量添加到指定的字段中。 它接收两个整数参数,一个表示要添加的字段,另一个表示要添加的数量。 通过这个函数,可以对特定的字段进行添加操作,根据传入的字段和数量来改变其值。 它主要用于在程序中对某些数据进行添加处理,以实现特定的功能或逻辑。 函数的参数类型为整数,确保了操作的准确性和一致性。 可以在程序的不同部分调用这个函数,根据具体需求进行添加操作。 它是一个通用的添加函数,适用于各种需要添加功能的场景。
根据日历规则,把指定的(带有符号的)时间量加给给定的日历字段。
3. 完成字段的计算工作。
转换UTC毫秒值为时间域值
protected void computeTime()
覆盖Calendar ,转换时间域值为UTC毫秒值
boolean equals(Object obj)
将此 GregorianCalendar 与指定的 Object 进行比较。
int get(int field)
获取指定字段的时间值
获取实际的最大值,这个最大值是针对指定的字段 field 而言的。
返回当前日期,给定字段的最大值
获取实际的最小值(获取字段的实际最小值),其中字段为给定的参数 field,函数返回一个整数值 int 类型的结果(函数返回一个整数值,该值为给定字段的实际最小值)。
返回当前日期,给定字段的最小值
获取最大的最小值的函数为 getGreatestMinimum,该函数接收一个参数 field
获取此 GregorianCalendar 实例中指定日历字段的最大最小值。
Date getGregorianChange()
获得格里高利历的更改日期。
10
从指定字段中获取最小的最大值。
获取此 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 是一个布尔类型的值。这个函数没有具体的返回值,它的主要作用是根据传入的参数进行某种操作,可能是在一个游戏或模拟环境中对 field 进行滚动操作,具体的操作取决于 up 的值是 true 还是 false。
在指定的时间字段上加或减一个时间单元,不改变更大的字段。
19
设置一个字段的值,这个字段用整数表示为 field,要设置的值用整数表示为 value
用给定的值设置时间字段。
20
设置特定的年、月、日参数
设置年、月、日的值。
21
设置需要传入年、月、日、小时和分钟这些数值
设置年、月、日、小时、分钟的值。
22
设定年、月、日、时、分、秒这些具体的参数
设置年、月、日、小时、分钟、秒的值。
23
设置格里高利历变更的日期为指定的日期 date 。
设置 GregorianCalendar 的更改日期。
24
void setTime(Date date)
用给定的日期设置Calendar的当前时间。
25
设置以毫秒为单位的时间。这个时间将被设置。设置的时间是以毫秒为单位的。通过调用这个方法,传入一个长整型的毫秒值,就可以完成时间的设置。具体来说,就是将传入的毫秒值赋给相应的时间变量或属性,从而实现时间的设定。
用给定的long型毫秒数设置Calendar的当前时间。
26
设置时区的方法是 setTimeZone,它接收一个 TimeZone 类型的参数 value 。
用给定时区值设置当前时区。
27
String toString()
返回代表日历的字符串。
import java.util.*;
有一个叫做 GregorianCalendarDemo 的公共类。
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 中获取到的 Calendar.HOUR 的值进行打印并添加一个冒号 ;
System.out.print(获取的日历对象 gcalendar 中的分钟值 + ":");
输出 gcalendar 获取到的 Calendar.SECOND 的值。
// 测试当前年份是否为闰年
如果 gcalendar 是闰年(gcalendar.isLeapYear(year) 为真),那么就满足以下情况:
“当前年份是闰年”这句话会被 System.out 打印出来。
}
else {
输出的内容是“当前年份不是闰年”。
}
}
}
以上实例编译运行结果如下:
年