Java中获取指定日为星期几及其他日期操作

在开发中经常会使用到一些日期方面的操作,下面例子展示几个常用的操作。

1、取得指定日期是星期几

取得指定日期是星期几可以采用下面两种方式取得日期是星期几:

a、使用Calendar类

//根据日期取得星期几
	public static String getWeek(Date date){
		String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if(week_index<0){
			week_index = 0;
		} 
		return weeks[week_index];
	}

b、使用SimpleDateFormat类

//根据日期取得星期几
	public static String getWeek(Date date){ 
		SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
		String week = sdf.format(date);
		return week;
	}

注:格式化字符串存在区分大小写
对于创建SimpleDateFormat传入的参数:EEEE代表星期,如“星期四”;MMMM代表中文月份,如“十一月”;MM代表月份,如“11”;
yyyy代表年份,如“2010”;dd代表天,如“25”


        

2、取得日期是某年的第几周

根据日期入得日期是某年的第几周。

//取得日期是某年的第几周
	public static int getWeekOfYear(Date date){
		Calendar cal = Calendar.getInstance();
        cal.setTime(date);
		int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);
		return week_of_year;
	}

3、得到某年的某个月有多少天

已知年份和月份,取得该月有多少天。

//取得某个月有多少天
	public static int getDaysOfMonth(int year,int month){
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month-1);
		int days_of_month = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		return days_of_month;
	}

4、取得两个日期之间的相差多少天

已知两个日期,计算它们之间相差多少天。

// 取得两个日期之间的相差多少天
	public static long getDaysBetween(Date date0, Date date1) {
		long daysBetween = (date0.getTime() - date1.getTime() + 1000000) / 86400000;// 86400000=3600*24*1000  用立即数,减少乘法计算的开销
		return daysBetween;
	}





5、完整的测试代码

package org.ml.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalendarDemo {
	public static void main(String[] args) {
		String strDate = "2013-03-08";// 定义日期字符串
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");// 定义日期格式
		Date date = null;
		try {
			date = format.parse(strDate);// 将字符串转换为日期
		} catch (ParseException e) {
			System.out.println("输入的日期格式不合理!");
		}
		System.out.println(strDate + "是:" + getWeek(date));
		System.out.println(strDate + "是一年的第:" + getWeekOfYear(date) + "周");
		System.out.println(strDate + "是一年的" + (date.getMonth() + 1) + "月有:"
				+ getDaysOfMonth(date.getYear(), date.getMonth() + 1) + "天");
		System.out.println(strDate + "距离" + (format.format(new Date())) + "还有"
				+ getDaysBetween(date, new Date()) + "天");

	}

	// 根据日期取得星期几
	public static String getWeek(Date date) {
		// String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
		// Calendar cal = Calendar.getInstance();
		// cal.setTime(date);
		// int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
		// if(week_index<0){
		// week_index = 0;
		// }
		// return weeks[week_index];
		SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
		String week = sdf.format(date);
		return week;
	}

	// 取得日期是某年的第几周
	public static int getWeekOfYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);
		return week_of_year;
	}

	// 取得某个月有多少天
	public static int getDaysOfMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month-1);
		int days_of_month = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		return days_of_month;
	}

	// 取得两个日期之间的相差多少天
	public static long getDaysBetween(Date date0, Date date1) {
		long daysBetween = (date0.getTime() - date1.getTime() + 1000000) / 86400000;// 86400000=3600*24*1000  用立即数,减少乘法计算的开销
		return daysBetween;
	}

}

6、测试结果


7、引出的问题

看下面的代码:

public static void main(String[] args) throws Exception{
    String strDate = "999-999-999";// 定义日期字符串
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");// 定义日期格式
    Date date = null;
try {
    date = format.parse(strDate);// 将字符串转换为日期
} catch (ParseException e) {
    System.out.println("日期格式有误,请给出正确的日期格式");
    return;
}
    System.out.println(format.format(date)); 
}

Java中使用yyyy-MM-dd日期格式进行转换,转换字符串为999-999-999时,没有出现异常,反倒是执行通过了。

运行结果:1084-11-23

解决办法如下:

在date = format.parse(strDate)前面加上format.setLenient(false)就行了。意思是【指定日期/时间解析是否不严格。进行不严格解析时,解析程序可以使用启发式的方法来解释与此对象的格式不精确匹配的输入。进行严格解析时,输入必须匹配此对象的格式。 】

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用java.util.Calendar类来实现。首先,使用Calendar.getInstance()静态方法创建一个Calendar对象,然后使用setTime()方法将其设置为指定日期,最后使用get()方法获取星期几(Calendar.DAY_OF_WEEK)。 代码示例: ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse("2022-09-12"); Calendar cal = Calendar.getInstance(); cal.setTime(date); int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); ``` 上面代码,dayOfWeek的值为1,表示星期天。 其SimpleDateFormat是将字符串转成日期的工具类 ### 回答2: 在Java,可以通过使用`java.util.Calendar`类来获取指定日期星期几。 首先,我们需要创建一个`Calendar`对象,并使用指定日期设置它。可以使用以下代码创建并设置`Calendar`对象: ```java Calendar calendar = Calendar.getInstance(); calendar.set(year, month, day); // year为指定日期的年份,month为指定日期的月份(实际值要减1),day为指定日期的天 ``` 然后,我们可以使用`Calendar`对象的`get`方法来获取星期几。`Calendar.DAY_OF_WEEK`是一个`Calendar`类的常量,代表了一周的第几天,其1表示星期日,2表示星期一,以此类推,7表示星期六。可以使用以下代码获取指定日期对应的星期几: ```java int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); ``` 最后,我们可以将星期几转换为对应的星期几。可以使用一个数组来存储星期几的字符串,然后根据`dayOfWeek`的值来获取星期几。例如,可以使用以下代码获取星期几字符串: ```java String[] weekdays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; String chineseDayOfWeek = weekdays[dayOfWeek - 1]; ``` 这样,`chineseDayOfWeek`变量就保存了对应的星期几。你可以根据需要使用或打印这个变量的值。 综上所述,使用Java可以通过上述步骤来获取指定日期对应的星期几,并将其转换为星期几。 ### 回答3: 在Java,可以使用`java.util.Calendar`类来获取指定日期星期几。 首先,需要创建一个`Calendar`对象,并设置指定日期。可以通过调用`set`方法,传递年、月、日的参数来设置日期,月份从0开始计数,所以1月对应的是0,12月对应的是11。 接下来,可以使用`Calendar`的`get`方法来获取日期所对应的星期几。`Calendar`类提供了一个常量`Calendar.DAY_OF_WEEK`来表示星期几,返回值是一个整型值,1表示星期日,2表示星期一,依此类推,7表示星期六。可以使用一个`switch`语句根据返回的值判断具体是星期几。 以下是一个示例代码: ```java import java.util.Calendar; public class GetDayOfWeek { public static void main(String[] args) { int year = 2022; int month = 0; // 1月份,对应的是0 int day = 10; Calendar calendar = Calendar.getInstance(); calendar.set(year, month, day); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); String weekDay; switch (dayOfWeek) { case Calendar.SUNDAY: weekDay = "星期日"; break; case Calendar.MONDAY: weekDay = "星期一"; break; case Calendar.TUESDAY: weekDay = "星期二"; break; case Calendar.WEDNESDAY: weekDay = "星期三"; break; case Calendar.THURSDAY: weekDay = "星期四"; break; case Calendar.FRIDAY: weekDay = "星期五"; break; case Calendar.SATURDAY: weekDay = "星期六"; break; default: weekDay = "未知"; break; } System.out.println(year + "年" + (month + 1) + "月" + day + "日是" + weekDay); } } ``` 以上代码会输出:2022年1月10日是星期一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值