我有一种方法,必须在接下来的七天打印,但不是在接下来的七天打印,而是打印最后七天,
有人可以帮我解决这个问题
这是我使用的方法,
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class TestCalandar
{
public static void main(String[] args)
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE");
String date[] = null;
date = df.format(new Date()).split("/");
Calendar cal = Calendar.getInstance();
cal.set(Integer.parseInt(date[2]), Integer.parseInt(date[0]) - 1, Integer.parseInt(date[1]));
Map<String, String> currentWeekMap = new HashMap<String, String>();
for (int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; i++)
{
cal.set(Calendar.DAY_OF_WEEK, i);
currentWeekMap.put(dayFormat.format(cal.getTime()), df.format(cal.getTime()));
}
System.out.println(currentWeekMap);
}
}
答案 0 :(得分:1)
使用新的Java8时间API。这将完成您的代码尝试的目的。
Map<String, String> currentWeekMap = new HashMap<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate today = LocalDate.now();
for (int i=1; i<=7; i++) {
LocalDate newDay = today.plusDays(i);
String dayOfWeek = newDay.getDayOfWeek().toString();
String formattedDate = newDay.format(formatter);
currentWeekMap.put(dayOfWeek, formattedDate);
}
System.out.println(currentWeekMap);
答案 1 :(得分:0)
方法Calendar.set
将指定字段(在本例中为DAY_OF_WEEK
字段)设置为指定值。对其他字段的影响取决于其他因素,更具体地说,Calendar.set的效果是更改星期几,调整将在当前WEEK_OF_YEAR
内进行。此行为取决于运行代码的区域设置。
相反,您需要添加一天,因此您可以使用Calendar.add
方法。
cal.set(Calendar.DAY_OF_WEEK, i)
可以改为:
cal.add(Calendar.DAY_OF_YEAR, 1);
这将为循环的每次迭代添加一天。
如果需要按顺序打印输出,则在循环的每次迭代中打印将比放入HashMap
更好,因为HashMap
未被排序。
此外,您声明您的要求是打印接下来的7天,因此第一天应该是明天,这意味着您可以删除以下行。当您调用Calendar.getInstance()时,日期会自动设置为当前时区的当前时间,因此您只想立即开始添加日历,这意味着第一个日期将是明天。
cal.set(Integer.parseInt(date[2]), Integer.parseInt(date[0]) - 1, Integer.parseInt(date[1]));
请参阅此处:http://www.tutorialspoint.com/java/util/calendar_add.htm,以便在Google上的Calendar.add上进行首次搜索。
答案 2 :(得分:0)
我真是简短的例子
public class DateUtils {
private DateUtils() {}
public static Date addDays(Date baseDate, int daysToAdd) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(baseDate);
calendar.add(Calendar.DAY_OF_YEAR, daysToAdd);
return calendar.getTime();
}
}
答案 3 :(得分:0)
这里的解决方案应该输出你想要的:)。希望它有所帮助!
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
class TestCalandar
{
public static void main(String[] args){
Calendar now = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
String[] days = new String[7];
int delta = now.get(Calendar.DAY_OF_WEEK)-6;
now.add(Calendar.DAY_OF_MONTH, delta );
for (int i = 0; i < 7; i++)
{
days[i] = format.format(now.getTime());
now.add(Calendar.DAY_OF_MONTH, 1);
}
for(int i = 0 ; i < days.length ; i++){
System.out.println(days[i]);
}
}
}
答案 4 :(得分:0)
这是工作的,
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE");
String date[] = null;
date = df.format(new Date()).split("/");
Calendar cal = Calendar.getInstance();
cal.set(Integer.parseInt(date[2]), Integer.parseInt(date[0]), Integer.parseInt(date[1]));
Map<String, String> currentWeekMap = new HashMap<String, String>();
for (int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; i++) {
cal.add(Calendar.DATE, 1);
currentWeekMap.put(dayFormat.format(cal.getTime()), df.format(cal.getTime()));
}
System.out.println(currentWeekMap);
}