获取当前时间的后一天开始时间的时间戳以及一个关于日历类的一个编程问题

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值