java中如何根据某一周(比如22周)获取这一周是几月几号,星期几。有这样的函数方法吗

java中如何根据某一周(比如22周)获取这一周是几月几号,星期几。有这样的函数方法吗,第1张

我的程序是输入某年某周,输出这一周的开始日期和结束时期,不知是否符合你的需要。至少Java是不直接提供这种方法的。

import javautil;

public class Test31 {

public static void main(String[] args) {

int year, year1, year2, month1, month2, day1, day2, week, sum = 0;

int[] days = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int i;

Scanner scan = new Scanner(Systemin);

Systemoutprint("年:");

year = scannextInt();

Systemoutprint("周次:");

week = scannextInt();

if (year < 0) {

Systemoutprintln("年份错误,必须大于等于0");

return;

}

if (week < 1 || week > 54) {

Systemoutprintln("周次错误,必须位于 1 53 之间");

return;

}

sum += 7 (week - 1);

//修正总天数

Calendar c = CalendargetInstance();

cset(year, 0, 1);

switch (cget(CalendarDAY_OF_WEEK))

{

case CalendarTUESDAY:

{

sum -= 1;

break;

}

case CalendarWEDNESDAY:

{

sum -= 2;

break;

}

case CalendarTHURSDAY:

{

sum -= 3;

break;

}

case CalendarFRIDAY:

{

sum -= 4;

break;

}

case CalendarSATURDAY:

{

sum -= 5;

break;

}

case CalendarSUNDAY:

{

sum -= 6;

break;

}

default:

break;

}

if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {

days[1] = 29;

}

for (i = 0; i < dayslength; i++) {

if (sum >= days[i]) {

sum -= days[i];

}

else {

break;

}

}

year1 = year;

month1= i + 1;

day1 = sum + 1;

//修改开始日期

if (day1 < 1) {

day1 += days[11];

month1 = 12;

year1--;

}

year2 = year1;

month2 = month1;

day2 = day1 + 6;

if (day2 > days[month1 - 1]) {

day2 -= days[month1 - 1];

month2++;

if (month2 > 12) {

month2 = 1;

year2++;

}

}

Systemoutprintf("%d年第%d周 : %d年%d月%d日 ~ %d年%d月%d日", year, week, year1, month1, day1, year2, month2, day2);

}

}

输出测试:

年:2011

周次:22

2011年第22周 : 2011年5月23日 ~ 2011年5月29日

年:2011

周次:1

2011年第1周 : 2010年12月27日 ~ 2011年1月2日

这是从星期一至星期日。

也可以这样:

public static void main(String[] args){

Scanner scan = new Scanner(Systemin);

Systemoutprint("年:");

int year = scannextInt();

Systemoutprint("周:");

int week = scannextInt();

Calendar c = CalendargetInstance();

cset(CalendarDAY_OF_WEEK, 1);

cset(CalendarWEEK_OF_YEAR, week);

//该周第一天(星期日)所在的日期

int y1 = cget(CalendarYEAR);

int m1 = cget(CalendarMONTH) + 1;

int d1 = cget(CalendarDATE);

cadd(CalendarDATE, 6);

//该周最后一天(星期六)所在的日期

int y2 = cget(CalendarYEAR);

int m2 = cget(CalendarMONTH) + 1;

int d2 = cget(CalendarDATE);

Systemoutprintf("%d年第%d周:%d-%d-%d ~ %d-%d-%d", year, week, y1, m1, d1, y2, m2, d2);

}

这是从星期日开始,如:

年:2011

周:22

2011年第22周:2011-5-22 ~ 2011-5-28

楼上正解,不过楼主问出这个问题可能也是初学者,我就提供一下用简单语法的代码吧

public

static

void

main(String[]

args)

{

Scanner

scan=new

Scanner(Systemin);

Systemoutprintln("请输入年份");

int

year=

scannextInt();//得到需求年份

Systemoutprintln("请输入月份");

int

month=scannextInt();//得到需求月份

switch(month){

case

1:

case

3:

case

5:

case

7:

case

8:

case

10:

case

12:

Systemoutprintln(year+"年"+month+"月的天数为:"+31);

break;

case

4:

case

6:

case

9:

case

11:

Systemoutprintln(year+"年"+month+"月的天数为:"+30);

case

2:

if((year%400)==0

||

((year%4)==0)&&((year%100)!=0)){

Systemoutprintln(year+"年2月的天数为:"+29);

}else{

Systemoutprintln(year+"年2月的天数为:"+28);

}

}

}

import javautil;

public class month {

public static void main(String[] args) {

int month;//定义用户输入的数字

Scanner scanner=new Scanner(Systemin);

boolean flag=true;//定义标志,如果用户选择退出,则flag=false

while(flag){

Systemoutprint("请输入(1--12)之间的一个整形的数据(输入0结束):");//打印提示信息

month=scannernextInt();//接受键盘的输入

switch(month){

case 0:Systemoutprintln("您已退出");flag=false;break;

case 1:Systemoutprintln("一月31天");break;

case 2:Systemoutprintln("二月28天或29天");break;

case 3:Systemoutprintln("三月31天");break;

case 4:Systemoutprintln("四月30天");break;

case 5:Systemoutprintln("五月31天");break;

case 6:Systemoutprintln("六月30天");break;

case 7:Systemoutprintln("七月31天");break;

case 8:Systemoutprintln("八月31天");break;

case 9:Systemoutprintln("九月30天");break;

case 10:Systemoutprintln("十月31天");break;

case 11:Systemoutprintln("十一月30天");break;

case 12:Systemoutprintln("十二月31天");break;

default :Systemoutprintln("输入错误,请重新输入");

}

}

}

}

我定义的2,3,4为春天5,6,7为夏天,8,9,10为秋天11,12,1为冬天我只写Switch了其他的获取输入的值我就不写了用i定义为输入的值。

int i;

//i=输入的值。

switch(i)

{

case 2:

case 3:

case 4:

//这里写输出“春天”的语句

break;

case 5:

case 6:

case 7:

//这里写暑促“夏天”的语句。

break;

case 8:

case 9:

case 10:

//这里写输出“秋天”的语句;

break;

case 11:

case 12:

case 1:

//这里输出“冬天”的语句,

break;

}

import javaioIOException;

import javaioInputStreamReader;

public class test {

static int year, monthDay, weekDay; // 定义静态变量,以便其它类调用

public static boolean isLeapYear(int y) {// 判断是否是闰年

return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));

}

public static int firstDay(int y) {// 计算该年第一天是星期几

long n = y  365;

for (int i = 1; i < y; i++)

if (isLeapYear(i))// 判断是否是闰年

n += 1;

return (int) n % 7;

}

public static void printWeek() {// 打印标头

Systemoutprintln("===========================");

Systemoutprintln("日   一   二   三   四   五   六");

}

public static int getMonthDay(int m) {

switch (m) {

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

return 31;

case 4:

case 6:

case 9:

case 11:

return 30;

case 2:

if (isLeapYear(year))// 判断是否是闰年

return 29;

else

return 28;

default:

return 0;

}

}

public static void printMonth(int month) {

// 循环月份

for (int m = 1; m <= 12; m++) {

if (month == m) {

Systemoutprintln(m + "月");

printWeek();

}

for (int j = 1; j <= weekDay; j++) {// 按每个月第一天是星期几打印相应的空格

Systemoutprint("    ");

}

int monthDay = getMonthDay(m); // 获取每个月的天数

for (int d = 1; d <= monthDay; d++) {

if (month == m) {

if (d < 10)// 以下4行对输出格式化

Systemoutprint(d + "   ");

else

Systemoutprint(d + "  ");

}

weekDay = (weekDay + 1) % 7; // 每打印一天后,反应第二天是星期几

if (weekDay == 0) // 如果第二天是星期天,便换行。

if (month == m) {

Systemoutprintln();

}

}

}

}

public static void main(String[] args) throws IOException {

Systemoutprint("请输入一个年份和月份以空格隔开:");

InputStreamReader ir; // 以下接受从控制台输入

BufferedReader in;

ir = new InputStreamReader(Systemin);

in = new BufferedReader(ir);

String s = inreadLine();

year = IntegerparseInt(ssplit(" ")[0]trim());

monthDay = IntegerparseInt(ssplit(" ")[1]trim());

weekDay = firstDay(year); // 计算该年第一天是星期几

Systemoutprintln("\n      " + year + "年       " + monthDay

+ "月      ");

printMonth(monthDay);

}

}

怎么说了,SWITCHCASE 语句有其固定的语法格式,我没有遇到过CASE后面继续写条件的,如果写了不就是IF ELESE 了,当然也许有一些特殊的用法,我不知道,你自己搜索一下吧!我修改了一下你的代码:如下:

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner scanner = new Scanner(Systemin);

int month = scannernextInt();

switch (month) {

case 3:

case 4:

case 5:

Systemoutprintln("chun");

break;

case 6:

case 7:

case 8:

Systemoutprintln("xia");

break;

case 9:

case 10:

case 11:

Systemoutprintln("qiu");

break;

case 12:

case 1:

case 2:

Systemoutprintln("dong");

break;

default:

Systemoutprintln("没有般配的季节");

}

}

哈哈,switch语句只能表达一个准确的值,不能表达范围。

(具体原因是switch语句是由跳转表或顺序查找实现的,所以不支持范围)

不过对于你的问题,可以将字符串中月份的字符串截取出来(substring方法)作为switch语句的参数,然后把“01”到“12”所有情况全列出来就好了。

以上就是关于java中如何根据某一周(比如22周)获取这一周是几月几号,星期几。有这样的函数方法吗全部的内容,包括:java中如何根据某一周(比如22周)获取这一周是几月几号,星期几。有这样的函数方法吗、java 获取某月份的具体天数、jdk 编写java程序,接受用户输入的1~12之间的整数,若不符合条件则重新输入,利用switch语句 输出对应月份等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10155537.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存