1.获取当前时间的后一天 的开始时间
这里需要用到的是常用类库中DateFormat知识点以及Calendar知识点。
首先需要获取当前时间的时间戳,代码如下:
long time1 = System.currentTimeMillis();
通过DateFormat格式化:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
将时间戳转换为格式化时间并且转换为字符串:
String d1 = df.format(new Date(time1));
接下来需要用到Calendar设置时间,需要将当前时间的天数加一,将当前时间的小时,分钟,秒,毫秒设置为0,那么第二天开始的时间就已经设置好了
Calendar now = Calendar.getInstance();
now.add(Calendar.DATE,+1);
now.set(Calendar.HOUR_OF_DAY,0);
now.set(Calendar.MINUTE,0);
now.set(Calendar.SECOND,0);
now.set(Calendar.MILLISECOND,0);
String nextday = df.format(now.getTime());//将设置好的当前时间格式化
long time2 = now.getTimeInMillis();//当前时间转换为时间戳
看一下输出的结果
2.
某林业工人孙工,作息规律为上三天班,休息一天,经常不确定休息日是否是周末。为此,请你开发一个程序,当孙工
输入年以及月,以日历方式显示对应月份的休息日,用中括号进行标记(可以查看以前的休息情况和将来的休息情
况)。同时,统计出本月有几天休息,轮到周末休息有几天
直接上源代码,有一定的注释:
import java.util.Calendar;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.text.ParseException;
public class lianxi2 {
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("请输入年:");
int year = sc.nextInt();
System.out.println("请输入月: ");
int month = sc.nextInt();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date startData = df.parse("2020-02-01");//设置起始时间
cal.set(Calendar.YEAR, year);//将年,月设置为用户输入的时间
cal.set(Calendar.MONTH, month-1);
cal.set(Calendar.DAY_OF_MONTH, 1);//设置当前月数的第一天
int weekStart = cal.get(Calendar.DAY_OF_WEEK);//获得每周开始的时间
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i=1;i<weekStart;i++){
System.out.printf("%-8s","");//在变量右边缩进8个字符
}
int countRelax = 0;
int countWeekend = 0;
int maxDate = cal.getActualMaximum(Calendar.DATE);//让maxDate获取本月的最大天数
for (int i=1;i<= maxDate;i++){
cal.set(Calendar.DAY_OF_MONTH, i);//设置每月当天的天数,
Date temp = cal.getTime();//获取用户输入的年,月
int gap = getDifferentDay(startData, temp);//获得本月的总天数。
if (gap%4==1){//上三天休息一天,每循环一次休息天数+1
System.out.printf("%-8s","["+cal.get(Calendar.DAY_OF_MONTH)+"]");
countRelax++;
if (cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
countWeekend++;//判定休息天数是否在周末内,如果是周末天数+1
}
}else {
System.out.printf("%-8s", cal.get(Calendar.DAY_OF_MONTH));
}
if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
System.out.println();
}
cal.add(Calendar.DAY_OF_MONTH,1);
}
System.out.println("本月休息的天数有:"+countRelax);
System.out.println("本月轮到周末休息的天数有:"+countWeekend);
}
private static int getDifferentDay(Date from, Date to){//该方法用于获得本月的总天数
long fromTime = from.getTime();
long toTime = to.getTime();
int days = (int) ((toTime - fromTime) / (1000 * 60 * 60 * 24));
return days;
}
}