java - 打印日期范围从 1910 年 1 月 1 日到 2025 年 12 月 30 日
问题描述
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
public class Details
{
public static void main(String [] args)
{
HashMap<Integer, String> hmap = new HashMap<Integer, String>();
//Adding elements to HashMap
hmap.put(1, "January");
hmap.put(2, "January");
hmap.put(3, "January");
hmap.put(4, "January");
hmap.put(5, "January");
hmap.put(6, "January");
hmap.put(7, "January");
hmap.put(8, "January");
hmap.put(9, "January");
hmap.put(10, "January");
//FOR LOOP
System.out.println("For Loop:");
for (Map.Entry me : hmap.entrySet()) {
System.out.println("Key: "+ me.getKey() + " & Value: " + me.getValue());
}
//WHILE LOOP & ITERATOR
System.out.println("While Loop:");
Iterator iterator = hmap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry me2 = (Map.Entry) iterator.next();
System.out.println("Key: "+ me2.getKey() + " & Value: " + me2.getValue());
}
}
}
我的输出:
For Loop:
Key: 1 & Value: January
Key: 2 & Value: January
Key: 3 & Value: January
Key: 4 & Value: January
Key: 5 & Value: January
Key: 6 & Value: January
Key: 7 & Value: January
Key: 8 & Value: January
Key: 9 & Value: January
Key: 10 & Value: January
While Loop:
Key: 1 & Value: January
Key: 2 & Value: January
Key: 3 & Value: January
Key: 4 & Value: January
Key: 5 & Value: January
Key: 6 & Value: January
Key: 7 & Value: January
Key: 8 & Value: January
Key: 9 & Value: January
Key: 10 & Value: January
我想要这个输出:
1: January 1, 1910
2: January 2, 1910
3: January 3, 1910
4: January 4, 1910
5: January 5, 1910.....
up to
41758: December 28, 2025
41759: December 29, 2025
41760: December 30, 2025
谢谢您的帮助
解决方案
你可以这样做。查看java.time包以获得更多有用的日期/时间类。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
LocalDate start = LocalDate.of(1910,1,1);
LocalDate end = LocalDate.of(2025,12,31);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MMMM d, yyyy");
int key = 1;
while (start.isBefore(end)) {
System.out.println(key++ + " : " + start.format(fmt));
start = start.plus(1, ChronoUnit.DAYS);
}
打印这样的东西。
1 : January 1, 1910
2 : January 2, 1910
3 : January 3, 1910
4 : January 4, 1910
5 : January 5, 1910
6 : January 6, 1910
7 : January 7, 1910
8 : January 8, 1910
9 : January 9, 1910
10 : January 10, 1910
11 : January 11, 1910
12 : January 12, 1910
...
...
另一方面,如果您不想使用任何导入的类来执行此操作,则可以按如下方式执行:
- 创建月份名称数组
- 创建一个每月最多天数的数组(非闰年)。
- 创建闰年方法(稍后解释)。
String[] monthNames = { "January", "February", "March",
"April", "May", "June", "July", "August", "September",
"October", "November", "December" };
int[] monthDays =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int day = 1;
int month = 0; // months go from 0 to 11
int year = 1910;
int count = 0;
一个简单的 while 循环驱动程序,用于打印日期范围。
while (!(year == 2025 && month == 11 && day == 31)) {
count++;
System.out.printf("%d : %s %d, %d%n", count,
monthNames[month], day, year);
if (day++ >= monthDays[month]) {
// take care of February in a leap year
if (month == 1 && day == 29 && isLeap(year)) {
continue;
}
day = 1; // reset day if past end of month.
month++;
if (month == 12) {
month = 0; // reset month and increment year
year++;
}
}
}
只有能被 4 整除的非世纪年和能被 400 整除的世纪年才是闰年。首先检查非世纪年份,因为它们发生得更频繁。
public static boolean isLeap(int year) {
return year % 100 != 0 && year % 4 == 0 || year % 400 == 0;
}
推荐阅读
- flutter - 如何在颤动中创建带有点指示器的图像滑块?
- python-3.x - 尝试部署 reddit bot 时在 Heroku 上“构建 PyObjC 需要 macOS”
- swift - Swift 获取请求返回未经授权
- python-3.x - 如何在python中使用__all__动态导出变量?
- django - 为自定义用户模型向 Django 管理员添加一个字段
- reactjs - React BrowserRouter 更改 URL 但组件不呈现
- r - 你如何在r中堆叠两列?
- git - 使用强制推送提交时 git reset 无法工作
- android - 使用 react-native run-android 会产生安装错误
- python - 如何在jupyter中自动生成函数文档字符串