获取java中的时间戳

时间:2014-01-26 23:58:48

标签: 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();

               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秒?

3 个答案:

答案 0 :(得分:0)

你以前忘记打印了。试试这个

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());
}

之前的输出(具有固定日期)

Before: 1190520000000
After: 1190520005000

现在输出(当前时间)

Before: 1390789209073
After: 1390789214073

答案 1 :(得分:0)

你试过这个:

Date d1= initDate();//initialise your date to any date 
Date d2 = new Date(d1.getTime() + 5 * 1000 ); //add 5 seconds

答案 2 :(得分:0)

时间上的固定时刻

你似乎对java.util.Date&的性质感到困惑。 java.util.Calendar类。它们代表宇宙时间轴上的固定时刻,而不是持续移动的时钟。

计算机(以及您的JVM)已经有物理时钟跟踪持续时间。日期&日历类询问当前时间的物理时钟,然后记录该时刻。或者类重新创建过去(或未来)的时刻。但是存储在日期/日历实例中的日期和时间不会改变,也不会随时间推进。

定时器

如果您希望在某个时间触发某些事件,请参阅与Java捆绑的Timer class

约达时间

顺便说一句,java.util.Date& java.util.Calendar类非常麻烦。多年来,第三方开源Joda-Time图书馆已成为受欢迎的替代品。

Joda-Time类似于日期/日历类,因为DateTime代表时间轴上的固定时刻。在内部,java.util.Date和Joda-Time都保留一个长整数,即自Epoch / GMT(无时区偏移)后自1970年初以来的毫秒数(Unix UTC)。 DateTime存储该数字时区偏移。

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-Time主要是不可变的(用于线程安全)。因此,我们创建新实例而不是更改现有实例中的数据。让我们看一下上面创建的那个实例并为同一个日期和时区创建一个新实例,但是将它的时间设置为当天的第一个时刻(通常这意味着00:00:00的时间)......

DateTime firstMomentOfThatPastDayInBoston = aMomentInThePastInBoston.withTimeAtStartOfDay();

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

如果要提取自纪元以来的毫秒数(也许是“timestamp”所指的那个),请调用getMillis方法......

long millisSinceEpoch = firstMomentOfThatPastDayInBoston.getMillis(); // Use 'long' not 'int'!

要小心使用这种基于整数的“时间戳”。不同的编程语言,库,数据库引擎,文件系统和其他系统使用各种时期的各种计数(秒,毫秒,纳秒)(1970年1月1日的Unix风格不是唯一的时代)。传递原始整数值可能会变得棘手。

如果您需要java.util.Date与其他类一起使用,请转换...

java.util.Date date = firstMomentOfThatPastDayInBoston.toDate();

在“joda”中搜索StackOverflow以查找更多示例。

Java 8

在Java 8中,新的java.time.* package与Java平台捆绑在一起。这些新类由JSR 310定义,取代旧的捆绑类,并受到Joda-Time的启发。