Java取日期的所有时间点可根据年月日
- 格式:rtf
- 大小:115.13 KB
- 文档页数:14
Java⽇期时间使⽤总结Java 中有关⽇期时间的操作,其实⾮常简单,没什么好介绍的。
之所以编写简单知识点的博客,主要还是因为最近⽐较忙碌。
但是不管多么忙碌,⾃⼰还是想挤出时间,保持编写技术博客的习惯。
毕竟编写博客,不仅仅是为了总结,向别⼈分享技术,更重要的是锻炼⾃⼰的思考沉淀能⼒,以及写作表达能⼒。
下⾯我就快速简单的介绍⼀下 Java 中的⽇期时间操作类吧。
⼀、传统的⽇期时间类传统的⽇期时间操作类,主要有两个:Date 类和 SimpleDateFormat 类。
Date 类代码⽰例:import java.util.Date;public class DateDemo {public static void main(String[] args) {//使⽤空参构造 Date 对象,打印出的时间就是本机系统当前时间Date date1 = new Date();System.out.println(date1);/*使⽤有参构造 Date 对象,参数传递的是从计算机原点时间起的毫秒值在零时区,计算机原点时间是 1970 年 1 ⽉ 1 ⽇ 0 点整因为中国在东⼋区,所以对于中国⽽⾔,计算机原点时间是 1970 年 1 ⽉ 1 ⽇ 8 点整。
传递 0 毫秒,表⽰获取计算机原点时间*/Date date2 = new Date(0L);//打印出来的是 Thu Jan 01 08:00:00 CST 1970//也就是1970年1⽉1⽇8点,主要是因为中国是东⼋区,因此需要加8个⼩时System.out.println(date2);Date date3 = new Date();//通过 Date 对象的 getTime 可以获取到从计算机原点时间累计到现在的毫秒值long time1 = date3.getTime();System.out.println(time1);//Java也提供了⼀个快捷⽅法,获取到从计算机原点时间累计到现在的毫秒值long time2 = System.currentTimeMillis();//打印出来的 time2 和 time1 的值是相同的System.out.println(time2);Date date4 = new Date();//通过 setTime 传⼊从计算机原点起累计的毫秒值,可以设置出新的时间date4.setTime(0L);System.out.println(date4); //此时打印出的是计算机原点时间}}SimpleDateFormat 类的代码演⽰:import java.text.SimpleDateFormat;import java.util.Date;/*SimpleDateFormat 主要是为了将 Date 对象格式化为⾃定义的⽇期时间字符串也可以将指定格式的⽇期格式字符串,解析为 Date 对象*/public class DateDemo {public static void main(String[] args) {//将【⽇期对象】转换为【字符串】代码⽰例Date date1 = new Date();//创建了⼀个⽇期格式。
在写Java程序的时候总免不了与日期和时间打交道,特别是在做项目的时候,要按照各种各样的需求显示不同格式的日期和时间,这时候就需要快速的决定到底用哪一种好,下面对日期和时间的格式化进行了总结。
方法一:用java.util.Date类来实现,并结合ja va.te xt.Da teFor mat类来实现时间的格式化p ackag e net.sing lex.j avada te;/** * 以下默认时间日期显示方式都是汉语方式* 一般语言就默认汉语就可以了,时间日期的格式默认为MEDI UM风格,*比如:2013-6-10 13:14:41 * 以下显示的日期时间都是在Date类的基础上的来的,还可以利用Ca lenda r类来实现见类Tes tDate2.jav a* * @a uthor Sing leX * */im portjava.util.*; impor t jav a.tex t.*;p ublic clas s Tes tDate { p ublic stat ic vo id ma in(St ring[] arg s) { Dat e now = ne w Dat e();Calen dar c al =Calen dar.g etIns tance(); Date Forma t d1= Dat eForm at.ge tDate Insta nce(); //默认语言(汉语)下的默认风格(MEDIU M风格,比如:2013-6-10 13:14:41) Str ing s tr1 = d1.f ormat(now); Dat eForm at d2 = Da teFor mat.g etDat eTime Insta nce(); Str ing s tr2 = d2.f ormat(now); Dat eForm at d3 = Da teFor mat.g etTim eInst ance(); St ringstr3= d3.forma t(now); Da teFor mat d4 = D ateFo rmat.getIn stanc e();// 使用SHORT风格显示日期和时间Strin g str4 = d4.for mat(n ow);DateF ormat d5 =Date Forma t.get DateT imeIn stanc e(Dat eForm at.FU LL, D ateFo rmat.FULL); //显示日期,周,时间(精确到秒) Stri ng st r5 =d5.fo rmat(now); Date Forma t d6= Dat eForm at.ge tDate TimeI nstan ce(Da teFor mat.L ONG,DateF ormat.LONG); //显示日期。
JAVA处理日期时间常用方法在Java中,处理日期和时间是非常常见的操作。
Java提供了许多内置的类和方法来处理日期和时间,这些类和方法可以帮助我们进行日期的计算、格式化、比较等操作。
本篇文章将介绍Java中常用的日期时间处理方法。
1. Java中的Date类:Java中的Date类表示了一个特定的日期和时间。
可以使用Date类的构造方法来创建一个表示当前日期和时间的对象,例如:```javaDate date = new Date(;```Date类提供了一些常用的方法,例如getYear(, getMonth(, getDay(, getHour(, getMinute(, getSecond(等,可以用来获取当前日期和时间的具体信息。
2. Java中的Calendar类:Java中的Calendar类比Date类更加灵活,可以进行更复杂的日期和时间计算。
为了创建一个Calendar对象,可以使用Calendar类的getInstance(方法,例如:```javaCalendar calendar = Calendar.getInstance(;```Calendar类提供了各种方法来进行日期和时间的计算和操作,例如add(方法可以增加或减少指定的日期和时间字段,例如增加三天:```javacalendar.add(Calendar.DAY_OF_MONTH, 3);```set(方法可以设置指定的日期和时间字段,例如设置年份为2024年:```javacalendar.set(Calendar.YEAR, 2024);```get(方法可以获取指定的日期和时间字段的值,例如获取月份:```javaint month = calendar.get(Calendar.MONTH);```其他常用的操作还包括比较两个日期的大小、格式化日期等。
3. Java中的SimpleDateFormat类:Java中的SimpleDateFormat类用于格式化日期和时间的输出。
java 年月日的枚举值在Java中,可以使用Java 8中引入的java.time包中的枚举类型来表示年、月、日。
具体来说,可以使用Year、Month和DayOfWeek枚举类型来分别表示年、月和星期几。
1. Year枚举类型:Year枚举类型用于表示年份,它可以通过静态方法Year.now()获取当前的年份,也可以使用of()方法指定特定的年份。
例如:java.Year currentYear = Year.now();Year specificYear = Year.of(2022);2. Month枚举类型:Month枚举类型用于表示月份,它包括了1月到12月的枚举常量。
可以通过静态方法Month.valueOf("JANUARY")来获取特定月份的枚举常量,也可以直接使用Month.JANUARY这样的方式来表示月份。
例如:java.Month currentMonth = Month.JANUARY;Month specificMonth = Month.valueOf("FEBRUARY");3. DayOfWeek枚举类型:DayOfWeek枚举类型用于表示星期几,它包括了MONDAY到SUNDAY的枚举常量。
可以通过静态方法DayOfWeek.valueOf("MONDAY")来获取特定星期几的枚举常量,也可以直接使用DayOfWeek.MONDAY这样的方式来表示星期几。
例如:java.DayOfWeek currentDay = DayOfWeek.MONDAY;DayOfWeek specificDay = DayOfWeek.valueOf("TUESDAY");通过使用这些枚举类型,可以方便地表示和操作年、月、日的值,使得日期和时间的处理更加直观和简洁。
同时,Java 8中引入的新的日期时间API也提供了丰富的方法来对日期进行计算、格式化和解析,枚举类型的使用使得这些操作更加方便和安全。
Java获取年月日的方法在Java编程中,我们经常需要获取当前的年、月和日。
这些信息在许多应用程序中都是必需的,例如日历应用、日期处理和数据分析等。
本文将介绍几种获取年月日的方法,帮助你在Java中轻松地处理日期。
1. 使用Java.util.Date类Java.util.Date类是Java中处理日期和时间的基本类之一。
要获取当前的年、月和日,可以使用以下代码:import java.util.Date;import java.text.SimpleDateFormat;public class Main {public static void main(String[] args) {Date date = new Date();SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");SimpleDateFormat sdfMonth = new SimpleDateFormat("MM");SimpleDateFormat sdfDay = new SimpleDateFormat("dd");String year = sdfYear.format(date);String month = sdfMonth.format(date);String day = sdfDay.format(date);System.out.println("Year: " + year);System.out.println("Month: " + month);System.out.println("Day: " + day);}}在上面的代码中,我们使用了SimpleDateFormat类来格式化日期。
通过传入不同的格式化模式,我们可以获取所需的日期部分。
java获取每个月固定号数的方法以Java获取每个月固定号数的方法一、引言在编程中,我们经常需要获取每个月固定号数的日期,比如每个月的1号或者每个月的最后一天。
本文将介绍如何使用Java编程语言来获取每个月固定号数的方法。
二、使用Calendar类Java中的Calendar类提供了丰富的日期和时间操作方法,可以方便地获取每个月固定号数的日期。
1. 获取每个月的1号日期我们可以使用以下代码来获取每个月的1号日期:```javaimport java.util.Calendar;public class Main {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.DAY_OF_MONTH, 1);int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH) + 1;int day = calendar.get(Calendar.DAY_OF_MONTH);System.out.println("每个月的1号日期为:" + year + "-" + month + "-" + day);}}```运行以上代码,输出的结果为当前日期所在月份的1号日期。
例如,如果当前日期为2022年12月15日,输出结果为:每个月的1号日期为:2022-12-1。
2. 获取每个月的最后一天日期我们可以使用以下代码来获取每个月的最后一天日期:```javaimport java.util.Calendar;public class Main {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH) + 1;int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);System.out.println("每个月的最后一天日期为:" + year + "-" + month + "-" + lastDay);}}```运行以上代码,输出的结果为当前日期所在月份的最后一天日期。
JAVA获取各种⽇期时间31 public void printFormatDate(Date d) {32 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");33 System.out.println(df.format(d));34 }3536 public void test1() {// 下个⽉第⼀天 37 Date d = new Date();38 d = DateUtils.ceiling(d, Calendar.MONTH);// 进位⽉份 39 printFormatDate(d);// 2016-02-01 00:00:00 40 }4142 public void test2() {// 下个⽉第⼀天 43 Date d = new Date();44 d = DateUtils.addMonths(d, 1);// ⽉+1 45 d = DateUtils.setDays(d, 1);// 设置⽇为1号 46 d = DateUtils.truncate(d, Calendar.DATE);// 过滤时分秒 47 printFormatDate(d);// 2016-02-01 00:00:00 48 }4950 public void test3() {// 当⽉最后⼀天最后⼀秒 51 Date d = new Date();52 d = DateUtils.ceiling(d, Calendar.MONTH);// 进位⽉份 53 d = DateUtils.addMilliseconds(d, -1);// 减少1秒 54 printFormatDate(d);// 2016-01-31 23:59:59 55 }5657 public void test4() {// 当⽉第⼀天第⼀秒 58 Date d = new Date();59 d = DateUtils.truncate(d, Calendar.MONTH);// 截取时间到⽉份 60 printFormatDate(d);// 2016-01-01 00:00:00 61 }6263 public void test5() {// 下个⽉的这个时候 64 Date d = new Date();65 d = DateUtils.addMonths(d, 1);66 printFormatDate(d);// 2016-02-21 09:46:02 67 }6869 public void test6() {// 昨天的这个时候 70 Date d = new Date();71 d = DateUtils.addDays(d, -1);// 增加1⽉,如果下个⽉没有这1天,那就不加 72 printFormatDate(d);// 2016-01-20 09:46:48 73 }7475 public void test7() {// addMonth的注意点:2⽉没有29号 76 Date d = new Date();77 d = DateUtils.setDays(d, 29);78 d = DateUtils.addMonths(d, 1);// 并没有增加 79 printFormatDate(d);// 2016-01-29 09:47:45 80 }8182 public void test8() {// 这个⽉15号 83 Date d = new Date();84 d = DateUtils.setDays(d, 15);85 d = DateUtils.truncate(d, Calendar.DATE);// 截取时间到⽇ 86 printFormatDate(d);// 2016-01-15 00:00:00 87 }8889 public void test9() {// 输出包含今天的这个星期的每⼀天,星期第⼀天是周⽇ 90 Date d = new Date();91 Iterator<Calendar> c = DateUtils.iterator(d, DateUtils.RANGE_WEEK_SUNDAY);92 System.out.println();93 while (c.hasNext()) {94 printFormatDate(new Date(c.next().getTimeInMillis()));95 }96 }9798 public void test10() {// 今天是今年第⼏天 99 Date d = new Date();100 System.out.println(DateUtils.getFragmentInDays(d, Calendar.YEAR));// 21101 }102103 public void test11() {// 这个⽉第⼀个周⽇104 Date d = new Date();105 d = DateUtils.setDays(d, 1);106 while (true) {107 Calendar c = Calendar.getInstance();108 c.setTime(d);109 if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {110 printFormatDate(d);// 2016-01-03 10:31:43111 break;112 } else {113 d = DateUtils.addDays(d, 1);114 }115 }116 }117118 public void test12() {// 距2⽉1号还有多少天119 Date d = new Date();120 Date d2 = new Date();121 d2 = DateUtils.ceiling(d, Calendar.MONTH);// 2.1号122 long day2 = DateUtils.getFragmentInDays(d2, Calendar.YEAR);//2.1是今年第⼏天?123 long day1 = DateUtils.getFragmentInDays(d, Calendar.YEAR);//今天是今年第⼏天?124 System.out.println(day2 - day1);//11125 }01.获取当⽉的天数Calendar a = Calendar.getInstance();a.set(Calendar.DATE, 1);a.roll(Calendar.DATE, -1);int maxDate = a.get(Calendar.DATE);return maxDate;02.根据年⽉获取对应的⽉份天数Calendar a = Calendar.getInstance();a.set(Calendar.YEAR, year);a.set(Calendar.MONTH, month - 1);a.set(Calendar.DATE, 1);a.roll(Calendar.DATE, -1);int maxDate = a.get(Calendar.DATE);03.根据⽇期找到对应⽇期的星期String dayOfweek = "-1";try {SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");Date myDate = myFormatter.parse(date);SimpleDateFormat formatter = new SimpleDateFormat("E");String str = formatter.format(myDate);dayOfweek = str;} catch (Exception e) {System.out.println("错误!");}/*** 计算开始⽇期到结束⽇期之间⽉数* @param begDate 开始⽇期* @param endDate 结束⽇期* @return*/public static BigDecimal calculationAmount(Date begDate,Date endDate) {Calendar cal1 = Calendar.getInstance();cal1.setTime(begDate);cal1.add(Calendar.MONTH, 1);cal1.set(Calendar.DAY_OF_MONTH, cal1.getActualMinimum(Calendar.DAY_OF_MONTH));Date preMonth =cal1.getTime(); //开始⽇期的下⼀个⽉Calendar cal2 = Calendar.getInstance();cal2.setTime(endDate);cal2.add(Calendar.MONTH, -1);cal2.set(Calendar.DAY_OF_MONTH, cal2.getActualMaximum(Calendar.DAY_OF_MONTH));Date lastMonth = cal2.getTime(); //结束⽇期的上⼀个⽉long midValue = 0;//开始⽇期的下⼀个⽉和结束⽇期的上⼀个⽉之间有多少⽉if(preMonth.before(lastMonth)) {midValue = DataTimeUtils.differentDate("M", preMonth, lastMonth)+1;}long begDateNum = DataTimeUtils.differentDate("D", begDate, getEndMonthDate(begDate))+1;//开始⽇期到当前⽉底的的天数long begMouthNum = getCurrentMonthDay(begDate);//开始⽇期当前⽉有多少天BigDecimal begValue = new BigDecimal(begDateNum).divide(new BigDecimal(begMouthNum),6,BigDecimal.ROUND_HALF_UP); long endDateNum = DataTimeUtils.differentDate("D", getPreMonthDate(endDate),endDate)+1;//结束⽇期当⽉的第⼀天到结束⽇期的天数long endMouthNum = getCurrentMonthDay(endDate);//结束⽇期当前⽉有多少天BigDecimal endValue = new BigDecimal(endDateNum).divide(new BigDecimal(endMouthNum),6,BigDecimal.ROUND_HALF_UP); BigDecimal sumDate =begValue.add(endValue.add(new BigDecimal(midValue)));return sumDate;}/*** 判断⽇期是否在⾃然季内*/public static int getNaturalSeason(Date begDate) {Calendar beg = Calendar.getInstance();//设置开始⽇期beg.setTime(begDate);if((beg.get(Calendar.MONTH)+1)>0 && (beg.get(Calendar.MONTH)+1)<=3) {return 1;}else if((beg.get(Calendar.MONTH)+1)>=4 && (beg.get(Calendar.MONTH)+1)<=6) {return 2;}else if((beg.get(Calendar.MONTH)+1)>=7 && (beg.get(Calendar.MONTH)+1)<=9) {return 3;}else if((beg.get(Calendar.MONTH)+1)>=10 && (beg.get(Calendar.MONTH)+1)<=12) {return 4;}return 0;}/*** 判断⽇期是否在⾃然半年内*/public static int getNaturalHalfYear(Date begDate) {Calendar beg = Calendar.getInstance();//设置开始⽇期beg.setTime(begDate);if((beg.get(Calendar.MONTH)+1)>0 && (beg.get(Calendar.MONTH)+1)<=6) {return 1;}else if((beg.get(Calendar.MONTH)+1)>=7 && (beg.get(Calendar.MONTH)+1)<=12) {return 2;}return 0;}/*** 判断⽇期是否在⾃然年内*/public static int getNaturalYear(Date begDate) {Calendar beg = Calendar.getInstance();//设置开始⽇期beg.setTime(begDate);if((beg.get(Calendar.MONTH)+1)>0 && (beg.get(Calendar.MONTH)+1)<=12) {return 1;}return 0;}/*** 获取任意时间的⽉第⼀天* @param repeatDate* @return*/public static Date getPreMonthDate(Date repeatDate){return DateUtils.truncate(repeatDate,Calendar.MARCH);}/*** 获取任意时间的⽉的最后⼀天* @param repeatDate* @return*/public static Date getEndMonthDate(Date repeatDate) {Calendar calendar = Calendar.getInstance();calendar.setTime(repeatDate);calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return calendar.getTime();}/*** 根据⽇期计算当⽉有多少天* @param date* @return*/public static long getCurrentMonthDay(Date date) {Calendar a = Calendar.getInstance();a.setTime(date);a.set(Calendar.DATE, 1);a.roll(Calendar.DATE, -1);int maxDate = a.get(Calendar.DATE);return maxDate;}/*** 判断时间格式*/public static boolean isValidDate(String str) {boolean convertSuccess=true;// 指定⽇期格式为四位年/两位⽉份/两位⽇期,注意yyyy-MM-dd区分⼤⼩写;SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");try {// 设置lenient为false. 否则SimpleDateFormat会⽐较宽松地验证⽇期,⽐如2007-02-29会被接受,并转换成2007-03-01 format.setLenient(false);format.parse(str);} catch (ParseException e) {// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对convertSuccess=false;}return convertSuccess;}/**** @param ts MinimumGuaranteeDomain 的list* @return false 时间交叉 true 时间不交叉*/public static boolean check(List<MinimumGuaranteeDomain> ts ) {Collections.sort(ts, new MinimumGuaranteeDomain());boolean flag=true;for(int i=0; i<ts.size()-1;i++) {MinimumGuaranteeDomain item1=ts.get(i);;MinimumGuaranteeDomain item2=ts.get(i+1);Date end = new Date(DataTimeUtils.getTimeLong(item1.getEnddate())*1000);Date beg = new Date(DataTimeUtils.getTimeLong(item2.getBegdate())*1000);if(DataTimeUtils.differentDate("D",end,beg)<0) {flag=false;break;}}return flag ;}。
java中获取⽇期和时间的⽅法总结1、获取当前时间,和某个时间进⾏⽐较。
此时主要拿long型的时间值。
⽅法如下:要使⽤ java.util.Date 。
获取当前时间的代码如下Date date = new Date();date.getTime() ;还有⼀种⽅式,使⽤ System.currentTimeMillis() ;都是得到⼀个当前的时间的long型的时间的毫秒值,这个值实际上是当前时间值与1970年⼀⽉⼀号零时零分零秒相差的毫秒数⼀、获取当前时间, 格式为: yyyy-mm-dd hh-mm-ssDateFormat.getDateTimeInstance(2, 2, Locale.CHINESE).format(new java.util.Date());⼆、获取当前时间, 格式为: yyyy年mm⽉dd⽇上午/下午hh时mm分ss秒1 DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.CHINESE).format(new java.util.Date());三、获取当前时间(精确到毫秒), 格式为: yyyy-mm-dd hh:mm:ss.nnn1new java.sql.Timestamp(System.currentTimeMillis()).toString();⼀. 获取当前系统时间和⽇期并格式化输出:1import java.util.Date;2import java.text.SimpleDateFormat;3public class NowString {4public static void main(String[] args) {5 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置⽇期格式6 System.out.println(df.format(new Date()));// new Date()为获取当前系统时间7 }8 }⼆. 在数据库⾥的⽇期只以年-⽉-⽇的⽅式输出,可以⽤下⾯两种⽅法:1、⽤convert()转化函数:String sqlst = "select convert(varchar(10),bookDate,126) as convertBookDate from roomBook where bookDate between '2007-4-10' and '2007-4-25'" System.out.println(rs.getString("convertBookDate"));2、利⽤SimpleDateFormat类:先要输⼊两个java包:import java.util.Date;import java.text.SimpleDateFormat;然后:定义⽇期格式:SimpleDateFormat sdf = new SimpleDateFormat(yy-MM-dd);sql语句为:String sqlStr = "select bookDate from roomBook where bookDate between '2007-4-10' and '2007-4-25'";输出:System.out.println(df.format(rs.getDate("bookDate")));3、java中获取当前⽇期和时间的⽅法1)如何取得年⽉⽇、⼩时分秒?2)如何取得从1970 年到现在的毫秒数?3)如何取得某个⽇期是当⽉的最后⼀天?4)如何格式化⽇期?1import java.sql.Date;2import java.text.SimpleDateFormat;3import java.util.Calendar;45public class Demo12 {67/**8 * @param args9*/10public static void main(String[] args) {11// TODO Auto-generated method stub12 Calendar c = Calendar.getInstance();13 System.out.println("年:" + c.get(Calendar.YEAR));14 System.out.println("⽉:" + (c.get(Calendar.MONTH) + 1));15 System.out.println("⽇:" + c.get(Calendar.DAY_OF_MONTH));16 System.out.println("24时制⼩时:" + c.get(Calendar.HOUR_OF_DAY));17 System.out.println("12时制:" + c.get(Calendar.HOUR));18 System.out.println("分:" + c.get(Calendar.MINUTE));19 System.out.println("秒:" + c.get(Calendar.SECOND));20 System.out.println("今天是⼀年中的第:" + c.get(Calendar.DAY_OF_YEAR) + "天");21//-------毫秒数2223long currentSec = System.currentTimeMillis();24 System.out.println("毫秒数为:" + currentSec);2526//------⽇期最后⼀天2728int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);29 System.out.println("当前⽇期最后⼀天:" + maxDay);3031//-------格式化⽇期3233 String format = "yyyy年MM⽉dd⽇ HH:mm:ss";34 SimpleDateFormat SDF = new SimpleDateFormat(format);35 String timer = SDF.format(new Date(currentSec));36 System.out.println("格式化⽇期后:" + timer);3738 }3940 }⼆1import java.util.Date;2import java.util.Calendar;3import java.text.SimpleDateFormat;4public class TestDate{5public static void main(String[] args){6 Date now = new Date();7 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以⽅便地修改⽇期格式89 String hehe = dateFormat.format( now );10 System.out.println(hehe);11 Calendar c = Calendar.getInstance();//可以对每个时间域单独修改14int year = c.get(Calendar.YEAR);15int month = c.get(Calendar.MONTH);16int date = c.get(Calendar.DATE);17int hour = c.get(Calendar.HOUR_OF_DAY);18int minute = c.get(Calendar.MINUTE);19int second = c.get(Calendar.SECOND);20 System.out.println(year + "/" + month + "/" + date + " " +hour + ":" +minute + ":" + second);21 }22 }23有时候要把String类型的时间转换为Date类型,通过以下的⽅式,就可以将你刚得到的时间字符串转换为Date类型了。
获得年月日小时分秒java得到年月日小时分秒推荐 Calendar cal=Calendar.getInstance();cal.setTime(new Date());int year=cal.get(Calendar.YEAR);int month=cal.get(Calendar.MONTH)+1;int date=cal.get(Calendar.DATE);int hour=cal.get(Calendar.HOUR);int minute=cal.get(Calendar.MINUTE);int second=cal.get(Calendar.SECOND);int milliSecond=cal.get(LISECOND);SimpleDateFormat格式化日期import java.text.SimpleDateFormat;import java.util.Date;public class test {public static void main(String []aa){SimpleDateFormat dateformat1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");String a1=dateformat1.format(new Date());System.out.println("时间2:"+a1);System.out.println(new Date().getYear()+1900);SimpleDateFormat dateformat2=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E "); String a2=dateformat2.format(new Date());System.out.println("时间2:"+a2);}}执行结果:时间2:2006-12-21 14:40:59 星期四2006时间2:2006年12月21日 14时40分59秒星期四java.util.Calendar对于日期的处理非常的方便,如newDate.set(Calendar.MONTH, 12); //加12个月,newDate.set(Calendar.DATE, -1); //前一天import java.text.SimpleDateFormat;import java.util.Date;import java.util.Calendar;public class calendartest {/*** @param args*/public static void main(String[] args) {SimpleDateFormat dateformat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");System.out.println("今天 :"+dateformat.format(new Date()));Calendar c=Calendar.getInstance();c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);Date d1=new Date(c.getTimeInMillis());System.out.println("星期一:"+dateformat.format(d1));c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);Date d2=new Date(c.getTimeInMillis());System.out.println("星期日:"+dateformat.format(d2));}}执行结果:今天 :2006-12-21 16:39:03 星期四星期一:2006-12-18 16:39:03 星期一星期日:2006-12-17 16:39:03 星期日。
取日期的年月日函数
在编写程序时,我们常常需要获取日期中的年份、月份和日期。
这时候就需要用到取日期的年月日函数。
下面将分别介绍如何使用函数获取日期中的年、月、日。
1. 获取年份
获取日期中的年份是我们在编写程序中经常需要用到的一个操作。
一般而言,我们使用的编程语言中都提供了获取年份的函数,如Java中的Calendar.get(Calendar.YEAR)函数。
2. 获取月份
获取日期中的月份也是我们在编写程序中常用的操作之一。
我们可以使用类似于获取年份的方法,如Java中的Calendar.get(Calendar.MONTH)+1函数,其中+1是因为Java中月份是从0开始的。
3. 获取日期
获取日期中的日期(也即是日)也是我们在编写程序中的一个常用操作。
我们同样可以采用类似于获取年份和月份的方法,如Java中的Calendar.get(Calendar.DATE)函数。
4. 参数和返回值
在使用取日期的年月日函数时,我们需要注意函数的参数和返回值。
一般而言,我们需要将日期作为参数传给函数,函数将返回对应的年份、月份或日期。
5. 日期格式化
在使用取日期的年月日函数时,我们还需要注意日期格式化。
不同的编程语言对于日期格式的表达方式有所不同,因此我们需要对日期进行格式化,将其转换为我们需要的格式。
一般而言,我们可以使用字符串的方式来表达日期,或者使用日期格式化类进行格式化,如Java中的SimpleDateFormat类。
综上所述,取日期的年月日函数在编写程序中是非常实用的,希望大家在编写程序时能够熟练地运用这些函数,提高编程效率。
Java获取当前时间的年、⽉、⽇、⼩时、分钟、秒数public static void getDateTime() throws ParseException{Calendar now = Calendar.getInstance();System.out.println("年: " + now.get(Calendar.YEAR));System.out.println("⽉: " + (now.get(Calendar.MONTH) + 1) + "");System.out.println("⽇: " + now.get(Calendar.DAY_OF_MONTH));System.out.println("时: " + now.get(Calendar.HOUR_OF_DAY));System.out.println("分: " + now.get(Calendar.MINUTE));System.out.println("秒: " + now.get(Calendar.SECOND));System.out.println("当前时间毫秒数:" + now.getTimeInMillis());System.out.println(now.getTime());Date d = new Date();System.out.println(d);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateNowStr = sdf.format(d);System.out.println("格式化后的⽇期:" + dateNowStr);String str = "2012-1-13 17:26:33"; //要跟上⾯sdf定义的格式⼀样Date today = sdf.parse(str);System.out.println("字符串转成⽇期:" + today);}输出结果:2014-12-26年: 2014⽉: 12⽇: 26时: 15分: 6秒: 35当前时间毫秒数:1419577595014Fri Dec 26 15:06:35 CST 2014Fri Dec 26 15:06:35 CST 2014格式化后的⽇期:2014-12-26 15:06:35字符串转成⽇期:Fri Jan 13 17:26:33 CST 2012。
Java日期和时间处理:使用Date和Calendar类进行日期计算引言:在编程中,日期和时间的处理是非常常见的需求。
Java提供了Date和Calendar 两个类来处理日期和时间。
本文将介绍如何使用这两个类进行日期计算,并提供一些实际应用的例子。
一、Date类的基本使用Date类是Java中处理日期和时间的基本类。
它表示自1970年1月1日00:00:00 GMT以来的毫秒数。
我们可以使用Date类来表示一个特定的日期和时间。
1. 创建一个Date对象要创建一个Date对象,可以使用无参数的构造函数,它将返回当前的日期和时间。
```javaDate date = new Date();```2. 获取日期和时间Date类提供了一些方法来获取日期和时间的各个部分,如年、月、日、时、分、秒等。
```javaint year = date.getYear() + 1900; // 获取年份,需要加上1900int month = date.getMonth() + 1; // 获取月份,需要加上1int day = date.getDate(); // 获取日期int hour = date.getHours(); // 获取小时int minute = date.getMinutes(); // 获取分钟int second = date.getSeconds(); // 获取秒钟```3. 格式化日期和时间要将日期和时间格式化为字符串,可以使用SimpleDateFormat类。
```javaSimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formattedDate = sdf.format(date);```二、Calendar类的基本使用Calendar类是Java中处理日期和时间的另一个重要类。
javaDate获取年月日时分秒转载:java Date获取年月日时分秒1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2package com.util;import java.text.DateFormat;import java.util.Calendar;import java.util.Date;public class Test {public void getTimeByDate(){Date date = new Date();DateFormat df1 = DateFormat.getDateInstance();//日期格式,精确到日System.out.println(df1.format(date));DateFormat df2 = DateFormat.getDateTimeInstance();//可以精确到时分秒System.out.println(df2.format(date));DateFormat df3 = DateFormat.getTimeInstance();//只显示出时分秒System.out.println(df3.format(date));DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL) ; //显示日期,周,上下午,时间(精确到秒)System.out.println(df4.format(date));DateFormat df5 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG) ; //显示日期,上下午,时间(精确到秒)System.out.println(df5.format(date));DateFormat df6 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHOR T); //显示日期,上下午,时间(精确到分)System.out.println(df6.format(date));DateFormat df7 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MED IUM); //显示日期,时间(精确到分)System.out.println(df7.format(date));}public void getTimeByCalendar(){Calendar cal = Calendar.getInstance();4 25 26 27 28 29 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3int year = cal.get(Calendar.YEAR);//获取年份int month=cal.get(Calendar.MONTH);//获取月份int day=cal.get(Calendar.DATE);//获取日int hour=cal.get(Calendar.HOUR);//小时int minute=cal.get(Calendar.MINUTE);//分int second=cal.get(Calendar.SECOND);//秒int WeekOfYear = cal.get(Calendar.DAY_OF_WEEK);//一周的第几天System.out.println("现在的时间是:公元"+year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒星期"+WeekOfYear);}public static void main(String[] args) {Test t=new Test();t.getTimeByDate();System.out.println("*************************** *");t.getTimeByCalendar();}}获取日,如果大于16则+2个月,否则+1个月,输出7个月1 2 3 4 5 6 7 8 9101112131415 public static void main(String[] as) throws Exception { int j;Calendar cc = Calendar.getInstance();int myYear = cc.get(Calendar.YEAR);int myMonth = cc.get(Calendar.MONTH);j=cc.get(Calendar.DATE)>16?3:2;cc.set(Calendar.MONTH, myMonth+j);System.out.println(myYear+"-"+cc.get(cc.MONTH));for(int i=0;i<7;i++){cc.add(cc.MONTH, 1);int mm = cc.get(cc.MONTH);int mmm=mm==0?12:mm;System.out.println(myYear+"-"+mmm);}}java中Date与String的相互转化[html] view plaincopy1.这种转换要用到java.text.SimpleDateFormat类2.3.字符串转换成日期类型:4.方法1:5.6.也是最简单的方法 Date date=new Date("2008-04-14");7.8.方法2:9.10.SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");//小写的mm表示的是分钟11.String dstr="2008-4-24";12.java.util.Date date=sdf.parse(dstr);13.14.15.16.日期转换成字符串:17.18.SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");19.java.util.Date date=new java.util.Date();2:程序实例[html] view plaincopy1.package test;2.import java.text.DateFormat;3.import java.text.SimpleDateFormat;4.import java.text.ParseException;5.import java.util.Date;6.public class StringOrDate {7.public static String dateToString(Date date, String type) {8.String str = null;9.DateFormat format = new SimpleDateFormat("yyyy-MM-dd");10.if (type.equals("SHORT")) {11.// 07-1-1812.format = DateFormat.getDateInstance(DateFormat.SH ORT);13.str = format.format(date);14.} else if (type.equals("MEDIUM")) {15.// 2007-1-1816.format = DateFormat.getDateInstance(DateFormat.ME DIUM);17.str = format.format(date);18.} else if (type.equals("FULL")) {19.// 2007年1月18日星期四20.format = DateFormat.getDateInstance(DateFormat.FULL);21.str = format.format(date);22.}23.return str;24.}25.public static Date stringToDate(String str) {26.DateFormat format = new SimpleDateFormat("yyyy-MM-dd");27.Date date = null;28.try {29.// Fri Feb 24 00:00:00 CST 201230.date = format.parse(str);31.} catch (ParseException e) {32. e.printStackTrace();33.}34.// 2012-02-2435.date = java.sql.Date.valueOf(str);36.37.return date;38.}39.public static void main(String[] args) {40.Date date = new Date();41.System.out.println(StringOrDate.dateToString(date, "M EDIUM"));42.String str = "2012-2-24";43.System.out.println(StringOrDate.stringToDate(str));44.}Calendar和Date的转化(1) Calendar转化为DateCalendar cal=Calendar.getInstance();Date date=cal.getTime();(2) Date转化为CalendarDate date=new Date();Calendar cal=Calendar.getInstance();cal.setTime(date);SimpleDateFormat函数语法:G 年代标志符y 年M 月d 日h 时在上午或下午 (1~12)H 时在一天中 (0~23)m 分s 秒S 毫秒E 星期D 一年中的第几天F 一月中第几个星期几w 一年中第几个星期W 一月中第几个星期a 上午 / 下午标记符k 时在一天中 (1~24)K 时在上午或下午 (0~11)z 时区常见标准的写法"yyyy-MM-dd HH:mm:ss",注意大小写,时间是24小时制,24小时制转换成12小时制只需将HH改成hh,不需要另外的函数。
javaCalendarDate获取指定⽇期所在⽉或年的第⼀天和最后⼀天⼀.获取传⼊⽇期所在⽉的第⼀天public static Date getFirstDayDateOfMonth(final Date date) {final Calendar cal = Calendar.getInstance();cal.setTime(date);final int last = cal.getActualMinimum(Calendar.DAY_OF_MONTH);cal.set(Calendar.DAY_OF_MONTH, last);return cal.getTime();}⼆.获取传⼊⽇期所在⽉的最后⼀天public static Date getLastDayOfMonth(final Date date) {final Calendar cal = Calendar.getInstance();cal.setTime(date);final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);cal.set(Calendar.DAY_OF_MONTH, last);return cal.getTime();}三.获取传⼊⽇期所在年的第⼀天public static Date getFirstDayDateOfYear(final Date date) {final Calendar cal = Calendar.getInstance();cal.setTime(date);final int last = cal.getActualMinimum(Calendar.DAY_OF_YEAR);cal.set(Calendar.DAY_OF_YEAR, last);return cal.getTime();}四.获取传⼊⽇期所在年的最后⼀天public static Date getLastDayOfYear(final Date date) {final Calendar cal = Calendar.getInstance();cal.setTime(date);final int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR);cal.set(Calendar.DAY_OF_YEAR, last);return cal.getTime();}五.获取指定年⽉的第⼀天/*** 获取指定年⽉的第⼀天* @param year* @param month* @return*/public static String getFirstDayOfMonth1(int year, int month) {Calendar cal = Calendar.getInstance();//设置年份cal.set(Calendar.YEAR, year);//设置⽉份cal.set(Calendar.MONTH, month-1);//获取某⽉最⼩天数int firstDay = cal.getMinimum(Calendar.DATE);//设置⽇历中⽉份的最⼩天数cal.set(Calendar.DAY_OF_MONTH,firstDay);//格式化⽇期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.format(cal.getTime());}六.传⼊年和⽉,获取到本⽉的最后⼀天/*** 获取指定年⽉的最后⼀天* @param year* @param month* @return*/public static String getLastDayOfMonth1(int year, int month) {Calendar cal = Calendar.getInstance();//设置年份cal.set(Calendar.YEAR, year);//设置⽉份cal.set(Calendar.MONTH, month-1);//获取某⽉最⼤天数int lastDay = cal.getActualMaximum(Calendar.DATE);//设置⽇历中⽉份的最⼤天数cal.set(Calendar.DAY_OF_MONTH, lastDay);//格式化⽇期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.format(cal.getTime());}。
Java根据年⽉⽇精确计算年龄 1import java.text.SimpleDateFormat;2import java.util.Calendar;3import java.util.Date;45/**6 * Created by qing on 2017/3/28.7*/8public class AgeUtils {9// 根据年⽉⽇计算年龄,birthTimeString:"1994-11-14"10public static int getAgeFromBirthTime(String birthTimeString) {11// 先截取到字符串中的年、⽉、⽇12 String strs[] = birthTimeString.trim().split("-");13int selectYear = Integer.parseInt(strs[0]);14int selectMonth = Integer.parseInt(strs[1]);15int selectDay = Integer.parseInt(strs[2]);16// 得到当前时间的年、⽉、⽇17 Calendar cal = Calendar.getInstance();18int yearNow = cal.get(Calendar.YEAR);19int monthNow = cal.get(Calendar.MONTH) + 1;20int dayNow = cal.get(Calendar.DATE);2122// ⽤当前年⽉⽇减去⽣⽇年⽉⽇23int yearMinus = yearNow - selectYear;24int monthMinus = monthNow - selectMonth;25int dayMinus = dayNow - selectDay;2627int age = yearMinus;// 先⼤致赋值28if (yearMinus < 0) {// 选了未来的年份29 age = 0;30 } else if (yearMinus == 0) {// 同年的,要么为1,要么为031if (monthMinus < 0) {// 选了未来的⽉份32 age = 0;33 } else if (monthMinus == 0) {// 同⽉份的34if (dayMinus < 0) {// 选了未来的⽇期35 age = 0;36 } else if (dayMinus >= 0) {37 age = 1;38 }39 } else if (monthMinus > 0) {40 age = 1;41 }42 } else if (yearMinus > 0) {43if (monthMinus < 0) {// 当前⽉>⽣⽇⽉44 } else if (monthMinus == 0) {// 同⽉份的,再根据⽇期计算年龄45if (dayMinus < 0) {46 } else if (dayMinus >= 0) {47 age = age + 1;48 }49 } else if (monthMinus > 0) {50 age = age + 1;51 }52 }53return age;54 }5556// 根据时间戳计算年龄57public static int getAgeFromBirthTime(long birthTimeLong) {58 Date date = new Date(birthTimeLong * 1000l);59 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");60 String birthTimeString = format.format(date);61return getAgeFromBirthTime(birthTimeString);62 }63 }精确到⽉:/*** Created by admin on 2017/12/15.*/public String getAgeFromBirthTime(Date birthDay) {Calendar cal = Calendar.getInstance();// 得到当前时间的年、⽉、⽇int yearNow = cal.get(Calendar.YEAR);int monthNow = cal.get(Calendar.MONTH)+1;int dayNow = cal.get(Calendar.DATE);// 先截取到传⼊中的年、⽉、⽇cal.setTime(birthDay);int selectYear = cal.get(Calendar.YEAR);int selectMonth = cal.get(Calendar.MONTH) + 1;int selectDay = cal.get(Calendar.DAY_OF_MONTH);// ⽤当前年⽉⽇减去⽣⽇年⽉⽇int yearMinus = yearNow - selectYear;int monthMinus = monthNow - selectMonth;int dayMinus = dayNow - selectDay;String ageToMonth= "1⽉";if (yearMinus > 0){ageToMonth = String.valueOf(yearMinus)+"岁";} else if (monthMinus > 0) {ageToMonth = String.valueOf(monthMinus)+"⽉";}return ageToMonth;}1public static void main(String[] args) {2 String dataOfBirth = "2017-10-28";3 String age = getAgeFromBirthTime(dataOfBirth);4 System.out.println("age:" + age);5 }鸡肋:1public class TestAge {2public static void main(String[] args) {3// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");4try {5//此处是获得的年龄6int age = getAge(parse("2015-12-5 00:00:00")); //由出⽣⽇期获得年龄***7 System.out.println(age);8 } catch (Exception e) {9 e.printStackTrace();10 }11 }1213//出⽣⽇期字符串转化成Date对象14public static Date parse(String strDate) throws ParseException {15 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");16return sdf.parse(strDate);17 }1819//由出⽣⽇期获得年龄20public static int getAge(Date birthDay) throws Exception {21 Calendar cal = Calendar.getInstance();22if (cal.before(birthDay)) {23throw new IllegalArgumentException(24 "The birthDay is before Now.It's unbelievable!");25 }26int yearNow = cal.get(Calendar.YEAR);27int monthNow = cal.get(Calendar.MONTH);28int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);29 cal.setTime(birthDay);30int yearBirth = cal.get(Calendar.YEAR);31int monthBirth = cal.get(Calendar.MONTH);32int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);33int age = yearNow - yearBirth;3435if (monthNow <= monthBirth) {36if (monthNow == monthBirth) {37if (dayOfMonthNow < dayOfMonthBirth) age--;38 }else{39 age--;40 }41 }42return age;43 }。
Java-获取年⽉⽇对应的天⼲地⽀⼀、概述本次是以java语⾔开发为例,计算出年⽉⽇对应的天⼲地⽀。
⼆、代码1public class MyDate {2/**3 * 对于年⽉⽇的天⼲地⽀4*/5private int year_ganZhi;6private int month_ganZhi;7private int day_ganZhi;8/**9 * 关于阴历的相关信息10*/11private static int[] lunar_info = {0x04bd8, 0x04ae0, 0x0a570, 0x054d5,12 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0,13 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2,14 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40,15 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0,16 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7,17 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0,18 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355,19 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,20 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263,21 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0,22 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0,23 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46,24 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50,25 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954,26 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0,27 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0,28 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50,29 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,30 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6,31 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0,32 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0};33/**34 * 记录天⼲的信息35*/36private String[] gan_info = {"甲", "⼄", "丙", "丁", "戊", "⼰", "庚", "⾟",37 "壬", "癸"};38private String[] zhi_info = {"⼦", "丑", "寅", "卯", "⾠", "巳", "午", "未",39 "申", "⾣", "戌", "亥"};40/**41 * 单例模式42*/43private static volatile MyDate instance = null;44private MyDate() {45 }4647public static MyDate getInstance() {48if (instance == null) {49synchronized (MyDate.class) {50if (instance == null) {51 instance = new MyDate();52 }53 }54 }55return instance;56 }5758/**59 * 获取农历某年的总天数60 *61 * @param year62 * @return63*/64private int daysOfYear(int year) {65int sum = 348;66for (int i = 0x8000; i > 0x8; i >>= 1) {67 sum += (lunar_info[year - 1900] & i) == 0 ? 0 : 1;68 }69//获取闰⽉的天数70int daysOfLeapMonth;71if ((lunar_info[year - 1900] & 0xf) != 0) {72 daysOfLeapMonth = (lunar_info[year - 1900] & 0x10000) == 0 ? 29 : 30;73 } else {74 daysOfLeapMonth = 0;75 }76return sum + daysOfLeapMonth;77 }7879/**80 * 初始化年⽉⽇对应的天⼲地⽀81 * @param year82 * @param month83 * @param day84*/85public void initGanZhi(int year, int month, int day) {86//获取现在的时间87 Calendar calendar_now = Calendar.getInstance();88 calendar_now.set(year, month - 1, day);89long date_now = calendar_now.getTime().getTime();90//获取1900-01-31的时间91 Calendar calendar_ago = Calendar.getInstance();92 calendar_ago.set(1900, 0 ,31);93long date_ago = calendar_ago.getTime().getTime();94//86400000 = 24 * 60 * 60 * 100095long days_distance = (date_now - date_ago) / 86400000L;96float remainder = (date_now - date_ago) % 86400000L;97//余数⼤于0算⼀天98if (remainder > 0) {99 days_distance += 1;100 }101//都是从甲⼦开始算起以1900-01-31为起点102//1899-12-21是农历1899年腊⽉甲⼦⽇ 40:相差1900-01-31有40天103 day_ganZhi = (int)days_distance + 40;104//1898-10-01是农历甲⼦⽉ 14:相差1900-01-31有14个⽉105 month_ganZhi = 14;106int daysOfYear = 0;107int i;108for (i = 1900; i < 2050 && days_distance > 0; i++) {109 daysOfYear = daysOfYear(i);110 days_distance -= daysOfYear;111 month_ganZhi += 12;112 }113if (days_distance < 0) {114 days_distance += daysOfYear;115 i--;116 month_ganZhi -= 12;117 }118//农历年份119int myYear = i;120//1864年是甲⼦年121 year_ganZhi = myYear - 1864;122//哪个⽉是闰⽉123int leap = lunar_info[myYear - 1900] & 0xf;124boolean isLeap = false;125int daysOfLeapMonth = 0;126for (i = 1; i < 13 && days_distance > 0; i++) {127//闰⽉128if (leap > 0 && i == (leap + 1) && !isLeap) {129 isLeap = true;130if ((lunar_info[myYear - 1900] & 0xf) != 0) {131 daysOfLeapMonth = (lunar_info[myYear - 1900] & 0x10000) == 0 ? 29 : 30; 132 } else {133 daysOfLeapMonth = 0;134 }135 --i;136 } else {137 daysOfLeapMonth = (lunar_info[myYear - 1900] & (0x10000 >> i)) == 0 ? 29 : 30; 138 }139//设置⾮闰⽉140if (isLeap && i == (leap + 1)) {141 isLeap = false;142 }143 days_distance -= daysOfLeapMonth;144if (!isLeap) {145 month_ganZhi++;146 }147 }148if (days_distance == 0 && leap > 0 && i == leap + 1 && !isLeap) {149 --month_ganZhi;150 }151if (days_distance < 0) {152 --month_ganZhi;153 }154 }155156/**157 * 将年⽉⽇转化为天⼲地⽀的显⽰⽅法158 * @param index159 * @return160*/161private String ganZhi(int index) {162return gan_info[index % 10] + zhi_info[index % 12];163 }164165/**166 * 获取天⼲地⽀167 * @return168*/169public String getGanZhi() {170return "农历" + ganZhi(year_ganZhi) + "年 " + ganZhi(month_ganZhi) + "⽉ " + ganZhi(day_ganZhi) + "⽇";171 }172 }三、基本概念天⼲地⽀,源⾃于中国远古时代对天象的观测。
Java万年历思路1. 简介Java万年历是一种用来显示日期信息的工具,可以根据用户输入的年份和月份,生成对应月份的日历,并以美观的方式展示出来。
本文将介绍实现Java万年历的思路和步骤。
2. 思路实现Java万年历的主要思路如下: 1. 获取用户输入的年份和月份; 2. 判断输入是否合法,包括年份范围和月份范围; 3. 根据输入的年份和月份计算该月第一天是星期几; 4. 根据每个月的天数和第一天是星期几,生成一个二维数组表示整个月份的日历; 5. 将生成的日历以表格形式输出。
3. 实现步骤下面将详细介绍每个步骤具体的实现方法。
3.1 获取用户输入使用Java标准库中的Scanner类来获取用户输入。
首先创建一个Scanner对象,并使用其nextInt()方法获取用户输入的年份和月份。
Scanner scanner = new Scanner(System.in);System.out.print("请输入年份:");int year = scanner.nextInt();System.out.print("请输入月份:");int month = scanner.nextInt();3.2 判断输入是否合法要判断用户输入是否合法,需要考虑以下几个方面: - 年份范围:通常情况下,年份应该在公历的范围内,例如从1900年到2099年; - 月份范围:月份应该在1到12之间。
if (year < 1900 || year > 2099) {System.out.println("请输入合法的年份(1900-2099)!");return;}if (month < 1 || month > 12) {System.out.println("请输入合法的月份(1-12)!");return;}3.3 计算第一天是星期几根据输入的年份和月份,可以使用Java标准库中的Calendar类来计算该月第一天是星期几。
package com.util;import java.text.DateFormat;import java.text.ParseException;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;public class TimeUtil {//用来全局控制上一周,本周,下一周的周数变化private int weeks = 0;private int MaxDate;//一月最大天数private int MaxYear;//一年最大天数/*** @param args*/public static void main(String[] args) {TimeUtil tt = new TimeUtil();// System.out.println("获取当天日期:"+tt.getNowTime("yyyy-MM-dd"));// System.out.println("获取本周一日期:"+tt.getMondayOFWeek());// System.out.println("获取本周日的日期~:"+tt.getCurrentWeekday());// System.out.println("获取上周一日期:"+tt.getPreviousWeekday());// System.out.println("获取上周日日期:"+tt.getPreviousWeekSunday());// System.out.println("获取下周一日期:"+tt.getNextMonday());// System.out.println("获取下周日日期:"+tt.getNextSunday());// System.out.println("获得相应周的周六的日期:"+tt.getNowTime("yyyy-MM-dd"));// System.out.println("获取本月第一天日期:"+tt.getFirstDayOfMonth());// System.out.println("获取本月最后一天日期:"+tt.getDefaultDay());// System.out.println("获取上月第一天日期:"+tt.getPreviousMonthFirst()); // System.out.println("获取上月最后一天的日期:"+tt.getPreviousMonthEnd());// System.out.println("获取下月第一天日期:"+tt.getNextMonthFirst());// System.out.println("获取下月最后一天日期:"+tt.getNextMonthEnd());// System.out.println("获取本年的第一天日期:"+tt.getCurrentYearFirst()); DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = fmt.parse("2008-02-21");} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("获取某年最后一天日期:"+tt.getCurrentYearEnd(date)); System.out.println("获取某年的去年的第一天日期:"+tt.getPreviousYearFirst(date));System.out.println("获取某年去年的最后一天日期:"+tt.getPreviousYearEnd(date));System.out.println("获取某年的第一天日期:"+tt.getCurrentYearfirst(date));// System.out.println("获取明年第一天日期:"+tt.getNextYearFirst());// System.out.println("获取明年最后一天日期:"+tt.getNextYearEnd());// System.out.println("获取本季度第一天到最后一天:"+tt.getThisSeasonTime(11));// System.out.println("获取两个日期之间间隔天数2008-12-1~2008-9.29:"+TimeUtil.getTwoDay("2008-12-1","2008-9-29"));System.out.println("ceshi "+tt.getLastDayOfMonths(date));System.out.println("cessss "+ tt.getFirstDayOfMonth(date));System.out.println("ceshi last year day "+tt.getLastYearFirstDayOfMonth(date));System.out.println("ceshi last year day "+tt.getLastYearLastDayOfMonths(date));System.out.println(tt.updateLastDate(date));}/*** 得到二个日期间的间隔天数*/public static String getTwoDay(String sj1, String sj2) {SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");long day = 0;try {java.util.Date date = myFormatter.parse(sj1);java.util.Date mydate = myFormatter.parse(sj2);day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);} catch (Exception e) {return "";}return day + "";}/*** 根据一个日期,返回是星期几的字符串** @param sdate* @return*/public static String getWeek(String sdate) {// 再转换为时间Date date = TimeUtil.strToDate(sdate);Calendar c = Calendar.getInstance();c.setTime(date);// int hour=c.get(Calendar.DAY_OF_WEEK);// hour中存的就是星期几了,其范围 1~7// 1=星期日 7=星期六,其他类推return new SimpleDateFormat("EEEE").format(c.getTime());}/*** 将短时间格式字符串转换为时间 yyyy-MM-dd** @param strDate* @return*/public static Date strToDate(String strDate) {SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); ParsePosition pos = new ParsePosition(0);Date strtodate = formatter.parse(strDate, pos);return strtodate;}/*** 两个时间之间的天数** @param date1* @param date2* @return*/public static long getDays(String date1, String date2) {if (date1 == null || date1.equals(""))return 0;if (date2 == null || date2.equals(""))return 0;// 转换为标准时间SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = null;java.util.Date mydate = null;try {date = myFormatter.parse(date1);mydate = myFormatter.parse(date2);} catch (Exception e) {}long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); return day;}// 计算当月最后一天,返回字符串public String getDefaultDay(){String str = "";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Calendar lastDate = Calendar.getInstance();lastDate.set(Calendar.DATE,1);//设为当前月的1号lastDate.add(Calendar.MONTH,1);//加一个月,变为下月的1号lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天str=sdf.format(lastDate.getTime());return str;}// 上月第一天public String getPreviousMonthFirst(){String str = "";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Calendar lastDate = Calendar.getInstance();lastDate.set(Calendar.DATE,1);//设为当前月的1号lastDate.add(Calendar.MONTH,-1);//减一个月,变为下月的1号//lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天str=sdf.format(lastDate.getTime());return str;}//获取当月第一天public String getFirstDayOfMonth(){String str = "";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Calendar lastDate = Calendar.getInstance();lastDate.set(Calendar.DATE,1);//设为当前月的1号str=sdf.format(lastDate.getTime());return str;}// 获得本周星期日的日期public String getCurrentWeekday() {weeks = 0;int mondayPlus = this.getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus+6);Date monday = currentDate.getTime();DateFormat df = DateFormat.getDateInstance();String preMonday = df.format(monday);return preMonday;}//获取当天时间public String getNowTime(String dateformat){Date now = new Date();SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);//可以方便地修改日期格式String hehe = dateFormat.format(now);return hehe;}// 获得当前日期与本周日相差的天数private int getMondayPlus() {Calendar cd = Calendar.getInstance();// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK)-1; //因为按中国礼拜一作为第一天所以这里减1if (dayOfWeek == 1) {return 0;} else {return 1 - dayOfWeek;}}//获得本周一的日期public String getMondayOFWeek(){weeks = 0;int mondayPlus = this.getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus);Date monday = currentDate.getTime();DateFormat df = DateFormat.getDateInstance();String preMonday = df.format(monday);return preMonday;}//获得相应周的周六的日期public String getSaturday() {int mondayPlus = this.getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6); Date monday = currentDate.getTime();DateFormat df = DateFormat.getDateInstance();String preMonday = df.format(monday);return preMonday;}// 获得上周星期日的日期public String getPreviousWeekSunday() {weeks=0;weeks--;int mondayPlus = this.getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus+weeks);Date monday = currentDate.getTime();DateFormat df = DateFormat.getDateInstance();String preMonday = df.format(monday);return preMonday;}// 获得上周星期一的日期public String getPreviousWeekday() {weeks--;int mondayPlus = this.getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks);Date monday = currentDate.getTime();DateFormat df = DateFormat.getDateInstance();String preMonday = df.format(monday);return preMonday;}// 获得下周星期一的日期public String getNextMonday() {weeks++;int mondayPlus = this.getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7); Date monday = currentDate.getTime();DateFormat df = DateFormat.getDateInstance();String preMonday = df.format(monday);return preMonday;}// 获得下周星期日的日期public String getNextSunday() {int mondayPlus = this.getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 7+6); Date monday = currentDate.getTime();DateFormat df = DateFormat.getDateInstance();String preMonday = df.format(monday);return preMonday;}private int getMonthPlus(){Calendar cd = Calendar.getInstance();int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);cd.set(Calendar.DATE, 1);//把日期设置为当月第一天cd.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天MaxDate=cd.get(Calendar.DATE);if(monthOfNumber == 1){return -MaxDate;}else{return 1-monthOfNumber;}}//获得上月最后一天的日期public String getPreviousMonthEnd(){String str = "";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Calendar lastDate = Calendar.getInstance();lastDate.add(Calendar.MONTH,-1);//减一个月lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天 str=sdf.format(lastDate.getTime());return str;}//获得下个月第一天的日期public String getNextMonthFirst(){String str = "";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Calendar lastDate = Calendar.getInstance();lastDate.add(Calendar.MONTH,1);//减一个月lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天str=sdf.format(lastDate.getTime());return str;}//获得下个月最后一天的日期public String getNextMonthEnd(){String str = "";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Calendar lastDate = Calendar.getInstance();lastDate.add(Calendar.MONTH,1);//加一个月lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天 str=sdf.format(lastDate.getTime());return str;}//获得明年最后一天的日期public String getNextYearEnd(){String str = "";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance();lastDate.add(Calendar.YEAR,1);//加一个年lastDate.set(Calendar.DAY_OF_YEAR, 1);lastDate.roll(Calendar.DAY_OF_YEAR, -1);str=sdf.format(lastDate.getTime());return str;}//获得明年第一天的日期public String getNextYearFirst(){String str = "";SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Calendar lastDate = Calendar.getInstance();lastDate.add(Calendar.YEAR,1);//加一个年lastDate.set(Calendar.DAY_OF_YEAR, 1);str=sdf.format(lastDate.getTime());return str;}//获得本年有多少天private int getMaxYear(){Calendar cd = Calendar.getInstance();cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。