求一思路,高手帮忙看看

bcsky 2004-11-19 02:08:51
现要求一个月的默认日期显示成这样
2004-11-26
2004-12-25
假设这个是一个周期,算一个月
但是如果真实日期过了2004-12-26后,
如何再循环显示成这样
2004-12-26
2005-01-25
关键是真实日期的26-30这几天怎么处理
先谢过了

...全文
119 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chanceqw 2004-11-19
  • 打赏
  • 举报
回复
public static void main(String[] args) {
/* //test1
TransformerPool tp=TransformerPool.getInstance();
System.out.println(tp.getCapacity());
*/
Date now=new Date();
System.out.println(getStartDateStr(now));
System.out.println(getEndDateStr(now));
}
public static String getStartDateStr(Date d){
int date=d.getDate();
Date tmp;
long l=24*60*60*1000; //一天的毫秒数
if(date<=25){
tmp=new Date(d.getTime()-27*l);
//保证能取到上个月,因为一个月最少天数是28,这里取27
tmp.setDate(26);
}else{
tmp=new Date(d.getTime());
tmp.setDate(26);
}
return getDateStr(tmp);
}
public static String getEndDateStr(Date d){
int date=d.getDate();
Date tmp;
long l=24*60*60*1000; //一天的毫秒数
if(date<=25){
tmp=new Date(d.getTime());
tmp.setDate(25);
}else{
tmp=new Date(d.getTime()+10*l);
//保证取到下个月,所以要取大于(31-26)而小于28的一个数,这里取的10天
tmp.setDate(25);
}
return getDateStr(tmp);
}
private static String getDateStr(Date d){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(d);
}
bcsky 2004-11-19
  • 打赏
  • 举报
回复
谢谢 我先看看
d_selenite 2004-11-19
  • 打赏
  • 举报
回复
没写中文注释,大致补充一下

//将起始时间设为本月的26日第一时间
java.util.Date start=new java.util.Date();
start.setTime(start.getTime()-start.getHours()*60*60*1000-start.getMinutes()*60*1000-start.getSeconds()*1000-start.getTime()%1000);
start.setDate(26);
//将结束时间设为本月25日最后时间
java.util.Date end=new java.util.Date();
end.setTime(end.getTime()-end.getHours()*60*60*1000-end.getMinutes()*60*1000-end.getSeconds()*1000-end.getTime()%1000-1);
end.setDate(25);

//比较当前时间和起始时间,
java.util.Date curTime=new java.util.Date();
if(curTime.before(start))
{
//如果当前时间比起始时间早,就把起始时间往前推一个月
//以下考虑为一月份往前推至前一年的十二月
if(start.getMonth()==0)
{
start.setMonth(11);
start.setYear(start.getYear()-1);
}
else
{
start.setMonth(start.getMonth()-1);
}
}
else
{
//如果当前时间比起始时间晚,就把结束时间往后推一个月
//一年的十二月往后推为次年的一月
if(end.getMonth()==11)
{
end.setMonth(0);
end.setYear(end.getYear()+1);
}
else
{
end.setMonth(end.getMonth()+1);
}
}
//现在就可以用了
System.out.println(start);
System.out.println(end);
d_selenite 2004-11-19
  • 打赏
  • 举报
回复
java.util.Date start=new java.util.Date();
start.setTime(start.getTime()-start.getHours()*60*60*1000-start.getMinutes()*60*1000-start.getSeconds()*1000-start.getTime()%1000);
start.setDate(26);
java.util.Date end=new java.util.Date();
end.setTime(end.getTime()-end.getHours()*60*60*1000-end.getMinutes()*60*1000-end.getSeconds()*1000-end.getTime()%1000-1);
end.setDate(25);

java.util.Date curTime=new java.util.Date();
if(curTime.before(start))
{
if(start.getMonth()==0)
{
start.setMonth(11);
start.setYear(start.getYear()-1);
}
else
{
start.setMonth(start.getMonth()-1);
}
}
else
{
if(end.getMonth()==11)
{
end.setMonth(0);
end.setYear(end.getYear()+1);
}
else
{
end.setMonth(end.getMonth()+1);
}
}

System.out.println(start);
System.out.println(end);
bcsky 2004-11-19
  • 打赏
  • 举报
回复
如果真实日期段是11月1号-11月30号
在1号-25号这个时间段内 要这样显示 开始时间 2004年10月26号 结束时间 2004年11月25号
在26号-30号这个时间段内 开始时间 2004年11月26号 结束时间 2004年12月25号
因为开始时间 和 结束时间 不是默认的一个月的1号到30号 而是26号到下个月的25号
chanceqw 2004-11-19
  • 打赏
  • 举报
回复
你的意思是不是
2004-11-26 至 2004-12-25
2004-12-26 至 2005-01-25
2005-01-26 至 2005-02-25
这样的重复?没明白你想干什么
是不是说你需要每个月的第一天是26号这样的
用Calendar可以做很多日期相关的事情
Calendar rightNow = Calendar.getInstance();
redex 2004-11-19
  • 打赏
  • 举报
回复
if(x<12)
...
else
...
其中,x代表提取出来的月份。
llp1217 2004-11-19
  • 打赏
  • 举报
回复
26-30这几天怎么处理,什么意思?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧