获取java中的时间戳
我想得到时间戳并加上5秒。我试过这个密码获取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();
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();