Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java中的时间戳_Java_Timestamp_Gregorian Calendar - Fatal编程技术网

获取java中的时间戳

获取java中的时间戳,java,timestamp,gregorian-calendar,Java,Timestamp,Gregorian Calendar,我想得到时间戳并加上5秒。我试过这个密码 GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23); int period = Integer.parseInt(5); cal.add(Calendar.SECOND, period); long millis = cal.getTimeInMillis();

我想得到时间戳并加上5秒。我试过这个密码

GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23);

               int period = Integer.parseInt(5);
               cal.add(Calendar.SECOND, period);
               long millis = cal.getTimeInMillis();

               String timeStamp = String.valueOf(millis);
但我总是得到同样的结果1190498405000,甚至一个小时后

编辑: 我试过这个代码,但我不确定它是否正确

java.util.Calendar cal2 = java.util.Calendar.getInstance();
                System.out.println("Instance before : "+ cal2.getTimeInMillis());
                cal2.add(java.util.Calendar.SECOND, 5);

                System.out.println("Instance after : "+ cal2.getTimeInMillis());
之前的实例:1390784737521 之后的实例:1390784742521


那么,前一次是准确的时间,第二次是+5秒?

您忘记打印前一次。试试这个

public static void main(String[] args) {
  // java.util.Calendar cal = new java.util.GregorianCalendar(2007, 9 - 1, 23);
  // Current time would be....
  java.util.Calendar cal = java.util.Calendar.getInstance();
  // ^------ The current time.
  System.out.println("Before: " + cal.getTimeInMillis());
  // v------ Add five seconds
  cal.add(java.util.Calendar.SECOND, 5);
  System.out.println("After: " + cal.getTimeInMillis());
}
之前的输出(固定日期)

立即输出(使用当前时间)

你试过这个吗:

Date d1= initDate();//initialise your date to any date 
Date d2 = new Date(d1.getTime() + 5 * 1000 ); //add 5 seconds
固定时间 您似乎对java.util.Date和java.util.Calendar类的性质感到困惑。它们代表了宇宙时间线中的一个固定时刻,而不是一个持续移动的时钟

计算机(以及您的计算机)已经有一个物理时钟跟踪正在进行的时间。Date&Calendar类要求物理时钟显示当前时间,然后记录该时刻。或者这些类从过去(或未来)重新创建一个瞬间。但是日期/日历实例中存储的日期和时间不会更改,也不会随着时钟向前滚动

计时器 如果您希望在某个时间触发某些事件,请参阅捆绑Java

乔达时间 顺便说一下,java.util.Date和java.util.Calendar类是出了名的麻烦。多年来,第三方开源库一直是受欢迎的替代品

Joda Time类似于Date/Calendar类,因为
DateTime
表示时间线上的固定时刻。在内部,java.util.Date和Joda Time都保持一个长整数,即自1970年初(Unix)以来的毫秒数,单位为/GMT(无时区偏移)。日期时间存储该数字和时区偏移量

DateTime now = new DateTime(); // Current date-time in default time zone.
通常最好指定一个时区

DateTime nowInBoston = new DateTime( DateTimeZone.forID( "America/New_York" ) );
代表过去的一刻

DateTime aMomentInThePastInBoston = new DateTime( 2007, 9, 23, 13, 14, 15, DateTimeZone.forID( "America/New_York" ) );
Joda时间基本上是不变的(为了线程安全)。因此,我们创建新实例,而不是更改现有实例中的数据。让我们以上面创建的实例为例,为相同的日期和时区创建一个新实例,但将其时间设置为一天中的第一个时刻(通常意味着时间为00:00:00)

执行此代码时,每个DateTime实例都位于内存中。它们的日期时间值(长整数)保持不变

如果您想提取自epoch以来的毫秒数(可能这就是您所说的“timestamp”),请调用该方法

long millisSinceEpoch = firstMomentOfThatPastDayInBoston.getMillis(); // Use 'long' not 'int'!
小心使用这种基于整数的“时间戳”。不同的编程语言、库、数据库引擎、文件系统和其他系统在不同的时间段使用不同的计数(秒、毫秒、纳秒)(1970年1月1日的Unix风格不是唯一的时间段)。传递原始整数值可能会变得棘手

如果您需要一个java.util.Date用于其他类,请转换

java.util.Date date = firstMomentOfThatPastDayInBoston.toDate();
在StackOverflow中搜索“joda”以查找更多示例

爪哇8
在Java8中,Java平台捆绑了一个新的组件。这些新类是由定义的,取代了旧的捆绑类,并受Joda Time的启发。

请发布编译的代码。您每次都在使用相同的时间播种日历,因此您不希望它返回相同的结果吗?定义“时间戳”。Java中的时间通常是自Unix时代以来的毫秒数<默认API中的code>Date(包括
Calendar
java.sql.Timestamp
和其他日期/时间组件)没有格式感。如果一小时后进行相同的计算时没有得到相同的结果,我会非常担心。我指望明天
2+2
仍然是
4
。你的问题的答案是肯定的。肯定的,但我每次都会得到这个结果!我需要确切的时间。也许我必须使用getInstance?我编辑了我的帖子,你能看一下吗
DateTime firstMomentOfThatPastDayInBoston = aMomentInThePastInBoston.withTimeAtStartOfDay();
long millisSinceEpoch = firstMomentOfThatPastDayInBoston.getMillis(); // Use 'long' not 'int'!
java.util.Date date = firstMomentOfThatPastDayInBoston.toDate();