
我的程序是输入某年某周,输出这一周的开始日期和结束时期,不知是否符合你的需要。至少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语句 输出对应月份等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)