最优解:
package cn.myAlgorithm;
import java.time.LocalDate;
public class CalendarTest {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
int month = date.getMonthValue();
int today = date.getDayOfMonth();
date = date.minusDays(today - 1);
int weekdayValue = date.getDayOfWeek().getValue();
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1; i < weekdayValue; i++) {
System.out.print(" ");
}
while (date.getMonthValue() == month) {
System.out.printf("%3d", date.getDayOfMonth());
if (date.getDayOfMonth() == today) {
System.out.print("*");
} else {
System.out.print(" ");
}
if (date.getDayOfWeek().getValue() == 7) {
System.out.println();
}
date = date.plusDays(1);
}
}
}
效果:
其他解1:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class VisualCalendar2 {
public static void main(String[] args) throws ParseException {
System.out.println("Please input date(Example:2019-7-17): ");
Scanner scanner = new Scanner(System.in);
String str1 = scanner.nextLine();
System.out.println("Your date is: " + str1);
// convert String to date
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf1.parse(str1);
// convert date to calendar
GregorianCalendar c1 = new GregorianCalendar();
c1.setTime(date1);
int day = c1.get(Calendar.DATE);
c1.set(Calendar.DATE, 1);
System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
int dow = c1.get(Calendar.DAY_OF_WEEK) - 1;
// System.out.println(dow);
int count = 0;
int maxDate = c1.getActualMaximum(Calendar.DATE);
for (int i = 1 - dow; i <= maxDate; i++) {
if (i == day) {
System.out.print(i + "*\t");
} else if (i >= 1) {
System.out.print(i + "\t");
} else {
System.out.print("\t");
}
count++;
if (count % 7 == 0 && count != 0) {
System.out.println();
}
}
}
}
其他解2:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class VisualCalendar {
public static void main(String[] args) throws ParseException {
System.out.println("Please input date(Example:2019-7-17): ");
Scanner scanner = new Scanner(System.in);
String str1 = scanner.nextLine();
System.out.println("Your date is: " + str1);
// convert String to date
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf1.parse(str1);
// convert date to calendar
GregorianCalendar c1 = new GregorianCalendar();
c1.setTime(date1);
int day = c1.get(Calendar.DATE);
c1.set(Calendar.DATE, 1);
System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSat");
int dow = c1.get(Calendar.DAY_OF_WEEK);
// System.out.println(dow);
for (int i = 0; i < dow - 1; i++) {
System.out.print("\t");
}
int maxDate = c1.getActualMaximum(Calendar.DATE);
for (int i = 1; i <= maxDate; i++) {
System.out.print(c1.get(Calendar.DATE) + ((c1.get(Calendar.DATE) == day) ? "*" : "") + "\t");
if (c1.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println();
}
c1.add(Calendar.DATE, 1);
}
}
}