新Date()和日历日期之间的差异

Lee*_*fin 8 java timezone calendar date

以下两个日期在实践中有什么区别?

  1. Date date = new Date();

  2. Date date = Calendar.getInstance().getTime();

我的理解是新的Date()是基于UTC/GMT的日期,而日历的getTime()是基于TimeZone和系统时间.我对吗?我还想念一些东西吗?

而且,如果我的上述理解是正确的,我可以说以下两个函数的最终结果完全相同吗?

1.

public String getDate1(){
   SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd");
   //I set the time zone & pass the new Date()
   sdf.setTimeZone(TimeZone.getDefault()); 
   return sdf.format(new Date());
}
Run Code Online (Sandbox Code Playgroud)

2.

public String getDate2(){
  SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd");
  //I didn't set the time zone because I think calendar instance will handle timezone change
  return sdf.format(Calendar.getInstance().getTime());
}
Run Code Online (Sandbox Code Playgroud)

如果你能指出我错误理解的地方并清楚地向我解释,我感激不尽.因为我觉得这件事让我很困惑.谢谢!

jim*_*gic 10

关于Java日历和日期的实用信息

如果要在Java程序中使用不同的日期,则将使用Java Calendar类.

我将尝试向您概述有关Java Calendar和Date类的未知广泛事实,工作代码示例,您可以立即尝试.

有关Calendar类的基本信息由Java API提供.Calendar类大约是几天,几个月和几年.有人可能会问:Date类不是一样的吗?不完全是...

Java Date和Calendar类有什么区别?

日期和日历之间的区别在于,日期类以特定的即时时间运行,日历以两个日期之间的差异运行.Calendar类使您可以在特定时刻和一组日历字段之间进行转换,例如HOUR,YEAR,MONTH,DAY_OF_MONTH.您还可以使用日历字段进行操作,例如获取祖母生日的日期:).

我想指出一些你应该知道的日历和日期,哪些不明显......

闰秒.

年,月,日和小时处于"正常"范围内,如:

一年y - 1900.一个月从0到11一个日期(日期)从1到31以通常的方式.日历闰秒小时0到23.以通常方式从0到59分钟.但是,注意!! 第二个由0到61之间的整数表示.看起来很奇怪 - 61秒,但不要忘记闰秒.每年或每两年大约有一次,称为"闰秒".闰秒总是作为当天的最后一秒添加,并且始终在12月31日或6月30日.例如,由于增加了闰秒,1995年的最后一分钟长61秒.

宽松的田野.

另一个有趣的功能是日历中的宽松和非宽松字段.那是什么?例:

实际上,如果你设置你的日历宽松,它将是2006年2月1日,你的程序没问题:).如果是非宽松的,则会抛出ArrayIndexOutOfBoundsException异常.

另一个问题是00:00结束或一天的开始?是00:00 AM还是PM?午夜和中午或下午?

答案:23:59是当天的最后一分钟,00:00是第二天的第一分钟.午夜属于"am",中午属于"pm",因此在同一天,凌晨12:00(午夜)<12:01 am,中午12:00(中午)<12:01 pm.

也许最后一个问题:什么是时代?以及为什么这个时代自1970年1月1日00:00:00.000 GMT.

实际上它是Unix时间或POSIX时间,是用于描述时间点的系统:它是1970年1月1日00:00:00 UTC之后的秒数.

等等,还有一个问题!

"如果我们使用自大纪元以来计算的时间,我怎么知道哪些年有闰秒,哪些不是?"

答:为了让生活更轻松,闰秒不计算在内.Java Date类占用OS的实际时间,大多数现代计算机都不能使用闰秒,它们的内部时钟不是那么精确.这就是为什么需要定期时间同步的原因.


Aff*_*ffe 2

这两个日期之间没有任何区别。(当然,第二个在分配您不使用的 Calendar 对象时有点浪费。)

java.util.Date 的实例是绝对时间点。它不了解时区。在 SimpleDateFormat 上设置默认时区同样不会执行任何操作,它使用默认值......默认!

为了尝试用不同的术语来解释, java.util.Date 为

世界标准时间 2013 年 12 月 19 日晚上 10:49

美国东部时间 2013 年 12 月 19 日下午 5:49

是完全相同的物体。完全相同的 java.util.Date 表示这两种人类可读的时间表示形式。仅当您使用格式化程序来回切换时,人类可读的考虑因素才会发挥作用。(因此,为什么您在格式化程序上设置时区,而不是在日期上设置时区,日期不知道时区的含义。)