当前位置:  开发笔记 > 编程语言 > 正文

Java.util.Calendar - 自1970年1月1日以来的毫秒数

如何解决《Java.util.Calendar-自1970年1月1日以来的毫秒数》经验,为你挑选了3个好方法。

程序后跟输出.有人请向我解释为什么从1970年1月1日开始的10,000,000毫秒是1969年11月31日.好吧,有人请说明我的假设第一次测试应该从1970年1月1日起产生10,000,000毫秒的时间有什么问题.数字小于10,000,000产生同样的结果.

public static void main(String[] args) {

    String x = "10000000";
    long l = new Long(x).longValue();
    System.out.println("Long value: " + l);

    Calendar c = new GregorianCalendar();
    c.setTimeInMillis(l);
    System.out.println("Calendar time in Millis: " + c.getTimeInMillis());

    String origDate = c.get(Calendar.YEAR) + "-" + c.get(Calendar.MONTH) + "-" + c.get(Calendar.DAY_OF_MONTH);  
    System.out.println("Date in YYYY-MM-DD format: " + origDate);

    x = "1000000000000";
    l = new Long(x).longValue();
    System.out.println("\nLong value: " + l);

    c.setTimeInMillis(l);
    System.out.println("Calendar time in Millis: " + c.getTimeInMillis());

    origDate = c.get(Calendar.YEAR) + "-" + c.get(Calendar.MONTH) + "-" + c.get(Calendar.DAY_OF_MONTH);  
    System.out.println("Date in YYYY-MM-DD format: " + origDate);
}

长值:10000000

Millis的日历时间:10000000

YYYY-MM-DD格式的日期:1969-11-31

长值:1000000000000

Millis的日历时间:1000000000000

YYYY-MM-DD格式的日期:2001-8-8

Chris Jester.. 12

您打印的日期Calendar是您所在时区的当地日期,而时期定义为1970-01-01格林威治标准时间午夜.因此,如果您居住在UTC西部的时区,那么您的日期将显示为1969-12-31,即使(在UTC中)它仍然是1970-01-01.



1> Chris Jester..:

您打印的日期Calendar是您所在时区的当地日期,而时期定义为1970-01-01格林威治标准时间午夜.因此,如果您居住在UTC西部的时区,那么您的日期将显示为1969-12-31,即使(在UTC中)它仍然是1970-01-01.


谢谢!我以为我疯了.

2> Steve McLeod..:

首先,c.get(Calendar.MONTH)为Jan返回0,为Feb返回1等.

其次,使用DateFormat输出日期.

第三,你的问题是Java的Date API有多尴尬的一个很好的例子.如果可以,请使用Joda Time API.它会让你的生活更轻松.

以下是代码的更好示例,它表示时区:

public static void main(String[] args) {

    final DateFormat dateFormat = SimpleDateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

    long l = 10000000L;
    System.out.println("Long value: " + l);
    Calendar c = new GregorianCalendar();
    c.setTimeInMillis(l);
    System.out.println("Date: " + dateFormat.format(c.getTime()));

    l = 1000000000000L;
    System.out.println("\nLong value: " + l);
    c.setTimeInMillis(l);
    System.out.println("Date: " + dateFormat.format(c.getTime()));
}



3> Mike..:

Calendar#setTimeInMillis()将日历的时间设置为GMT 1970年1月1日之后的毫秒数.

Calendar#get()返回为日历时区调整的请求字段,默认情况下,该字段是您计算机的本地时区.

如果您在构建日历时指定"GMT"时区,这应该可以正常工作:

Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT"));

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有