//月历
import java.util.*;
//import java.util.Date;
//import java.util.Calendar;
import java.text.*;
//import java.text.SimpleDateFormat;
//import java.text.Format;
public class MonthlyCalendar {
public String toString()//返回当月的月历
{
Calendar now=Calendar.getInstance();//返回表示当前日期的实例
int year=now.get(Calendar.YEAR);
int month=now.get(Calendar.MONTH)+1;//月份从0开始
now.set(year, month-1, 1);//设置为当月1日
int week=now.get(Calendar.DAY_OF_WEEK)-1;//当前1日是星期几
String str=year+"年"+month+"月的月历\n 日 一 二 三 四 五 六\n";
str+=String.format("%"+4*week+"c"," ");
int days=MyDate.daysOfMonth(year, month);//计算出当月的天数
for(int i=1;i<=days;++i)
{
str+=String.format("%4d", i);
if((week+i)%7==0)
str+="\n";
}
return str;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日EEEE a hh时" +
"mm分ss秒");
System.out.println(sdf.format(new Date()));
System.out.println(new MonthlyCalendar().toString());
}
}
以上一堆废话,现在程序报错如下:
Exception in thread "main" java.util.IllegalFormatConversionException: c != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printCharacter(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at MonthlyCalendar.toString(MonthlyCalendar.java:21)
at MonthlyCalendar.main(MonthlyCalendar.java:36)
2011年12月04日星期日 上午 10时31分11秒
求原因啊求原因~~
PS:欢迎各界群众前来拍砖!
关于String.format()和日期类的一些问题~~~·~
答案:1 悬赏:70 手机版
解决时间 2021-03-24 10:09
- 提问者网友:王者佥
- 2021-03-23 15:25
最佳答案
- 五星知识达人网友:雾月
- 2021-03-23 15:42
建议应该先去查一下String.format()的API文档,
str+=String.format("%"+4*week+"c"," ");
LZ想法应该是在1号前面补一定数量的半角空格,上面语句是想添加一定长度的半角空格,第2个参数应该是半角空格的unicode,上网查后发现空格的unicode为0020,所以应该改为:
str+=String.format("%"+4*week+"c",0x0020);
这样就可以实现。
MyDate类中计算某月天数的方法:
int days=MyDate.daysOfMonth(year, month);//计算出当月的天数
可以使用int days=now.getActualMaximum(now.DATE);
LZ可以试试看 ^_^
str+=String.format("%"+4*week+"c"," ");
LZ想法应该是在1号前面补一定数量的半角空格,上面语句是想添加一定长度的半角空格,第2个参数应该是半角空格的unicode,上网查后发现空格的unicode为0020,所以应该改为:
str+=String.format("%"+4*week+"c",0x0020);
这样就可以实现。
MyDate类中计算某月天数的方法:
int days=MyDate.daysOfMonth(year, month);//计算出当月的天数
可以使用int days=now.getActualMaximum(now.DATE);
LZ可以试试看 ^_^
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯