package JavaTest
import java.text.ParseException
import java.text.SimpleDateFormat
import java.time.Instant
import java.util.Calendar
import java.util.Date
import java.util.GregorianCalendar
import java.util.Locale
public class MyClassTest {
public static void main(String[] args) {
System.out.println("这是dateTest==========================================================")
dateTest()
System.out.println("")
System.out.println("这是simpleDateFormatTest==============================================")
simpleDateFormatTest()
System.out.println("")
System.out.println("这是calendarTest======================================================")
calendarTest()
System.out.println("")
}
static void dateTest() {
// 目前按照构造器来获得日期的只有这两种方法了,其他的均已过时,最好不用,因为可能是有bug才会丢弃
Date date = new Date()
Date date2 = new Date(60000000000000000L)
System.out.println("date ================== " + date)
System.out.println("date2 ================== " + date2)
long time = date.getTime()
System.out.println("time ====================" + time)
// 一直获取当前时间:年月日 时分秒
Instant instant = Instant.now()
Date time3 = Date.from(instant)
System.out.println("time3 ====================" + time3)
int b = date.compareTo(date2)
int b2 = date.compareTo(time3)
System.out.println("b ====================" + b)
System.out.println("b2 ====================" + b2)
}
static void simpleDateFormatTest() {
String instant = "2016年07月25日 14时29分29秒"
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时dd分mm秒")
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd HH:dd:mm")
try {
// 1.将字符串转为日期时,字符串格式一定要和SimpleDateFormat的格式一致,否则报异常
// 2.这也就是说,通过SimpleDateFormat,你可以将任意格式的日期字符串转化为日期,但是要注意第1条
Date date = sdf.parse(instant)
// 发现没有?这其实是另外一种获得日期实例的方法,通过格式化你自己的日期字符串获取日期
System.out.println("date ====================" + date)
// 3.而对于一个日期,你可以将其转为任意格式的字符串日期
// 目前我只发现日期格式不能用英文连接,只要是特殊字符(中文属于特殊字符)就可以连接
String dateString = sdf2.format(date)
System.out.println("dateString ====================" + dateString)
} catch (ParseException e) {
e.printStackTrace()
}
}
static void calendarTest() {
// 1.由于Calendar是一个抽象类,所以使用子类构造器获取的,这是获取罗马历法的日历
Calendar calendar = new GregorianCalendar()
// 2.或者单例获取,默认获取历法,也可以使用有参方法指定你想要的历法
// 这个单例方法有很多重载,你可以根据自己的需要来选择
Calendar calendar2 = Calendar.getInstance(Locale.CHINA)
// 获取指定字段值,获取年份
int year = calendar2.get(Calendar.YEAR)
System.out.println("获取年份 ====================" + year)
// 获取月份,月份0-11
int month = calendar2.get(Calendar.MONTH)
System.out.println("获取月份 ====================" + month)
// 获取天份
int day = calendar2.get(Calendar.DAY_OF_MONTH)
System.out.println("获取天份 ====================" + day)
// 指示当前月中的第几个星期
int dayOfWeekInMonth = calendar2.get(Calendar.DAY_OF_WEEK_IN_MONTH)
System.out.println("指示当前月中的第几个星期 ====================" + dayOfWeekInMonth)
// 获取小时
int hour = calendar2.get(Calendar.HOUR)
System.out.println("获取小时 ====================" + hour)
// 获取分钟
int minute = calendar2.get(Calendar.MINUTE)
System.out.println("获取分钟 ====================" + minute)
// 获取秒
int millisecond = calendar2.get(Calendar.MILLISECOND)
System.out.println("获取秒 ====================" + millisecond)
// 获取当前月中的星期数
int week = calendar2.get(Calendar.WEEK_OF_MONTH)
System.out.println("获取获取周 ====================" + week)
// 获取星期一
int monday = calendar2.get(Calendar.MONDAY)
System.out.println("获取星期一 ====================" + monday)
// 第四种获取日期实例的方法:获得表示相同时间的 Date类型实例,jdk1.1之后提倡通过历法获得Date实例
Date date = calendar2.getTime()
String instant = "2016-06-07 16:22:22"
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:dd:mm")
Date date2 = null
try {
date2 = sdf.parse(instant)
// 设置指定的时间
calendar2.setTime(date2)
Date date3 = calendar2.getTime()
System.out.println("获取自定义设置后重新生成的日期 ====================" + date3)
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
String dateString = sdf.format(date)
System.out.println("查看自定义设置后重新生成的日期字符串格式 ====================" + dateString)
// 修改指定字段的值
calendar2.set(Calendar.YEAR, 2019)
int year2 = calendar2.get(Calendar.YEAR)
System.out.println("获取设置后生成的年份====================" + year2)
// 设置年月入时分秒,也可以适当减少部分参数,按要求设置
calendar2.set(2077, 10, 30, 12, 12, 12)
int year3 = calendar2.get(Calendar.YEAR)
System.out.println("获取获取另一种方法设置后生成的年份 ====================" + year3)
// 在指定字段上添加一个值
calendar2.add(Calendar.MONTH, 1)
int month2 = calendar2.get(Calendar.MONTH)
System.out.println("获取添加后生成的月份 ====================" + month2)
// add方法与roll方法的区别
// add方法会改变更大的值,比如增加月份超过12了,年份就会跳到下一年,即add会改变更大一级的值
// roll方法则不然,就算月份回滚超过12了,年份也还是在本年度中,只是月份会改变,即回滚不会改变更大一级的值
calendar2.add(Calendar.MONTH, 15)
int yearAdd = calendar2.get(Calendar.YEAR)
// 这里的月份会增加到2079
System.out.println("增加月份后的年份 ====================" + yearAdd)
calendar2.roll(Calendar.MONTH, +15)
int yearRoll = calendar2.get(Calendar.YEAR)
// 按道理这里的月份会增加到2081,但是由于回滚不增加更大一级的值,所以年份依然是2079
System.out.println("回滚月份后的年份 ====================" + yearRoll)
// 其他的历法API都是见名知义的方法了,不需要意义解释了
// 解释一下getActualMaximum,getActualMinimum,getMaximum,getMinimum
// 返回月份中的最大天数
int monthRoll = calendar2.get(Calendar.MONTH)
System.out.println("获取回滚后的月份 ====================" + monthRoll)
// 返回当前月:6月份的最大天数
int maxMonth = calendar2.getActualMaximum(Calendar.DATE)
int maxMonth2 = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH)
System.out.println("获取月份中最大值 ====================" + maxMonth)
System.out.println("获取月份中最大值2 ====================" + maxMonth2)
// 返回月份的最大天数
int maxMonthNum = calendar2.getMaximum(Calendar.DATE)
int maxMonthNUm2 = calendar2.getMaximum(Calendar.DAY_OF_MONTH)
System.out.println("获取月份中最大值 ====================" + maxMonthNum)
System.out.println("获取月份中最大值2 ====================" + maxMonthNUm2)
// 这里可以看出getActualMaximum返回的是当前的实际数值
// 而getMaximum返回的是可能的最大值
// 对应的getActualMinimum,getMinimum也是一样的
}
}