打印一个类似Liunx cal命令的图形,不过不仅限于今天所在的月份,而是任意合法日期的,主要参考了LocalDate类的java doc。
效果如下图:
废话不多说,直接上代码:
package com.company;
import java.time.LocalDate;
public class DataPrint {
public String formatMonthStr(LocalDate localDate) {
String rel = String.format("%d: %s\n",localDate.getYear(),
localDate.getMonth().toString())+"Mon Tue Wed Thu Fri Sat Sun\n";
int dayOfMon = localDate.getDayOfMonth();
int thisMonthDays = localDate.getMonth().length(localDate.isLeapYear());
LocalDate firstDayOfMonth = localDate.minusDays(dayOfMon);
int DayOfWeek = firstDayOfMonth.getDayOfWeek().getValue() % 7;
StringBuilder startStr = new StringBuilder();
startStr.append(" ".repeat(Math.max(0, DayOfWeek)));
for (int i = 1; i <= thisMonthDays; i++,DayOfWeek=(DayOfWeek+1)%7)
{
String day=(i==dayOfMon)? String.format("%2d*",i) : String.format("%3d",i);
startStr.append(day);
if(DayOfWeek==6) {
startStr.append("\n");
}
else {
startStr.append(" ");
}
}
return rel+startStr;
}
}
package com.company;
import java.time.LocalDate;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// write your code here
while (true) {
System.out.println("Please print a timeStr such as 2022-02-24\n" +
"Enter \"quit\" to exit");
Scanner cin=new Scanner(System.in);
String ft=cin.next();
if(ft.equals("quit"))
break;
DataPrint dataPrint = new DataPrint();
LocalDate today = LocalDate.parse(ft);
System.out.println(dataPrint.formatMonthStr(today));
}
}
}
运行效果如下:
搞定!