公元1000真的是闰年还是sun API的BUG

zoeg 2010-04-13 03:07:08

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
public class Test{
public static void main(String[] args) throws ParseException{
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
GregorianCalendar gc=new GregorianCalendar(1000,1,29);
Date date=gc.getTime();
String sdate=dateFormat.format(date);
System.out.println(sdate);
}
}

1000-02-29这一天真的存在么?
按照闰年规则,1000年应该不是闰年,但是sun API却输出了这一天!!!
...全文
473 30 打赏 收藏 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
麦田捕手 2010-05-09
  • 打赏
  • 举报
回复
崇拜7楼高人啦,帮顶!
@井九 2010-05-09
  • 打赏
  • 举报
回复
if ((year & 3) != 0) {
return false;
}

SUN还真是细节不错啊。
mf0606 2010-05-09
  • 打赏
  • 举报
回复
不懂,对闰年这个问题很纠结……
longq121 2010-05-09
  • 打赏
  • 举报
回复
顶,确实不错,不过一些小的细节问题,不是我们知道的,SUN公司还是有自己的实力的。像这样的问题,如果LZ不说出来我可能一辈子都不知道,但我知道也对我帮助不大。
charles361 2010-05-08
  • 打赏
  • 举报
回复
你用数学算算不就知道了吗
ZHXDD 2010-05-08
  • 打赏
  • 举报
回复
(year%4==0&&year%100!=0)||year%400==0
欢乐极客 2010-04-23
  • 打赏
  • 举报
回复
七楼是正确的
wuzhenbao 2010-04-23
  • 打赏
  • 举报
回复
路过,学习
wjz748305545 2010-04-23
  • 打赏
  • 举报
回复
接分ing
zxcv991 2010-04-23
  • 打赏
  • 举报
回复
呵呵,太有才了
zfq642773391 2010-04-23
  • 打赏
  • 举报
回复
呵呵 顶个
fm2005 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 justlearn 的回复:]

再补充,GregorianCalendar 实现了格里高利历和儒略历,以1582年10月15号为区分
在1582年之前的采用儒略历(Julian)--闰年以4整除为标准,之后的用格里高利历(Gregorian)--闰年为被4整除,并且百年的能被400整除。
判断闰年源码:
Java code

public boolean isLeapYear(int year) {
i……
[/Quote]
正解
小_Y 2010-04-22
  • 打赏
  • 举报
回复
晕,
经典问题对经典回答。
专业。。。
TillPerfect 2010-04-13
  • 打赏
  • 举报
回复
四年一闰,百年不闰,四百年一大闰。
小学就是这样背的
luomf 2010-04-13
  • 打赏
  • 举报
回复
顶7楼
Helix333 2010-04-13
  • 打赏
  • 举报
回复
楼上正解
justlearn 2010-04-13
  • 打赏
  • 举报
回复
再补充,GregorianCalendar 实现了格里高利历和儒略历,以1582年10月15号为区分
在1582年之前的采用儒略历(Julian)--闰年以4整除为标准,之后的用格里高利历(Gregorian)--闰年为被4整除,并且百年的能被400整除。
判断闰年源码:

public boolean isLeapYear(int year) {
if ((year & 3) != 0) {
return false;
}

if (year > gregorianCutoverYear) {
return (year%100 != 0) || (year%400 == 0); // Gregorian
}
if (year < gregorianCutoverYearJulian) {
return true; // Julian
}
boolean gregorian;
// If the given year is the Gregorian cutover year, we need to
// determine which calendar system to be applied to February in the year.
if (gregorianCutoverYear == gregorianCutoverYearJulian) {
BaseCalendar.Date d = getCalendarDate(gregorianCutoverDate); // Gregorian
gregorian = d.getMonth() < BaseCalendar.MARCH;
} else {
gregorian = year == gregorianCutoverYear;
}
return gregorian ? (year%100 != 0) || (year%400 == 0) : true;
}
justlearn 2010-04-13
  • 打赏
  • 举报
回复
我从文档给你找到答案了
GregorianCalendar 实现的是儒略历。格里高利历和儒略历之间的唯一区别就是闰年规则。儒略历指定每 4 年就为闰年,而格里高利历则忽略不能被 400 整除的世纪年。

文档原文:
The only difference between the Gregorian and the Julian calendar is the leap year rule. The Julian calendar specifies leap years every four years, whereas the Gregorian calendar omits century years which are not divisible by 400.
sotom 2010-04-13
  • 打赏
  • 举报
回复
到Google 翻翻万年历去。看看
justlearn 2010-04-13
  • 打赏
  • 举报
回复
漏算了,貌似整百的还要被400整除
加载更多回复(10)
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 用户账户控制(UAC)白名单的配置 Windows7环境中 UAC(User Account Control,用户帐户控制)是由微软在Windows Vista版本中推出的一项旨在增强系统安全性的创新技术,该技术强制要求用户在执行可能干扰计算机正常运作的操作或进行更改会波及其他用户设置的变动前,必须提供相应的权限或管理员密码进行验证。通过对这些操作启动前进行授权确认,UAC能够有效阻止恶意软件及间谍软件在未获授权的状态下于计算机内进行安装或实施修改。 自从Vista版本问世以来,微软便开始推行这一全新的安全机制,可视为对系统安全防护的显著提升。尽管UAC确实能够在一定程度上对某些非法程序起到防御作用,但与此同时,这一功能也给众多用户带来了诸多不便。 因此,许多用户开始探寻是否存在类似于白名单的功能,以便将那些值得信赖的程序直接赋予运行权限。事实上,这类功能确实存在,不过微软并未将其作为标准配置提供。 网络上关于此问题的绝大多数建议都是建议禁用UAC,这种说法显然缺乏针对性,因为若用户希望禁用此功能,本就不会提出相关疑问。 通过运用微软官方发布的Microsoft Application Compatibility Toolkit 5.6版本,可以将信任的程序纳入系统白名单范畴。 获取Application Compatibility Toolkit 安装程序成功后会出现三个可执行文件 以管理员身份启动Compatibility Administrator 在Custom DataBases部分创建新的数据库,并添加一个Application Fix(在下方空白处点击右键,选择...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 DELL服务器的操作系统部署流程包含一系列细致的环节,其适用范围涵盖多种操作系统类型,例如Windows Server与Red Hat Linux等。在启动部署之前,必须确认服务器的光驱设备为DVD驱动器,并且需准备对应的系统安装媒介。下面将详细列出完整的部署步骤: 1. **启动准备**:将随服务器提供的Systems Management Tools and Documentation version 6.0光盘置入服务器光驱,随后设定服务器以光驱作为启动设备。此环节旨在确保服务器在启动阶段能够读取安装光盘内容。 2. **语言设定**:服务器启动后,选定简体中文作为部署语言,并确认接受许可协议条款。 3. **时区选择**:在部署期间,需设定时区为北京、香港、重庆或乌鲁木齐,依据实际地理位置进行适配选择。 4. **系统类型选择**:随后,需选定计划部署的操作系统,支持的版本包括Server 2003 SP2、Server 2003 SP2 64位版本、Windows 2003 SBS SP2、Server 2008、Windows 2008 SBS/EBS x64版本等,以及多种Red Hat和SUSE Linux版本。 5. **RAID设定**:若服务器出厂时已预设RAID配置,则可选择跳过此步骤。若需重新设定RAID,操作时需格外小心,因为这一过程可能引发硬盘数据遗失。 6. **引导分区规划**:设定引导分区的大小,通常C盘建议预留至少20GB的空间,具体容量需根据系统需求进行调整。 7. **网络设定**:网络设定可在系统部署完成后执行,部署期间建议暂时拔除...

62,620

社区成员

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

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