JAVA-它是JAVA.util.Calendar类中的一个bug还是什么?
我曾多次面临同样的问题 这个问题也有同样的问题,得到了同样的解决方案, 问题:JAVA-它是JAVA.util.Calendar类中的一个bug还是什么?,java,android,date,calendar,Java,Android,Date,Calendar,我曾多次面临同样的问题 这个问题也有同样的问题,得到了同样的解决方案, 问题: Calendar calCurr = Calendar.getInstance(); Log.i("Time in mili of Current - Normal", ""+calCurr.getTimeInMillis()); // see what it gives? dont know why? Date date = new Date();
Calendar calCurr = Calendar.getInstance();
Log.i("Time in mili of Current - Normal", ""+calCurr.getTimeInMillis());
// see what it gives? dont know why?
Date date = new Date();
calCurr.set(date.getYear()+1900, date.getMonth()+1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
// so added one month to it
Log.i("Time in mili of Current - after update", ""+calCurr.getTimeInMillis());
// now get correct
当我使用Calendar calCurr=Calendar.getInstance()时要获取当前日期和时间的日历对象,它总是返回错误的结果
我已经把日志和检查,并使其正确,我必须添加在年和月,然后我得到了当前日期和时间的正确对象
参见我的示例:
Calendar calCurr = Calendar.getInstance();
Log.i("Time in mili of Current - Normal", ""+calCurr.getTimeInMillis());
// see what it gives? dont know why?
Date date = new Date();
calCurr.set(date.getYear()+1900, date.getMonth()+1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
// so added one month to it
Log.i("Time in mili of Current - after update", ""+calCurr.getTimeInMillis());
// now get correct
问题:
- 为什么它给出了错误的输出
- 这是一个bug还是我对Calendar类的概念是错误的李>
- 告诉我该怎么做 为了这个
- 这是
日历的奇怪实现。
由于某些原因,一月是第0个月,而年份也不是很符合逻辑
我推荐使用Joda时间库。如果您更改为getDate()
它输出:
当前时间的百万分之三-正常星期三2012年4月4日11:34:34英国夏令时
当前时间的百万分之一-更新后的星期五2012年5月4日11:34:34英国夏令时
你期待什么?以千秒计,它也等于30天:
以毫秒为单位的电流-正常值133353834557
当前时间的百万分之一-更新1336127834557后
计算结果为(差值除以一天中的毫秒):
现在1970年后的毫秒数是。。。这很合适,我看没问题
编辑
您的问题是将月份设置为3月份…需要设置2..因为月份的索引从0到11。不要使用date.getXXX()
。不要使用任何setter或getter,除非Date.getTime()
。他们都不赞成。使用它们会导致意外的结果
如果调用Calendar.getInstance()
,则该日期已设置为当前日期。如果您想设置或添加日、月等,请在日历上设置它们
例如,calCurr.set(日历月,2)
或calCurr.add(日历日,1)
日历月份的索引为零。那么,你想在3月2日而不是3日举行
另外,不要从date对象设置年、月和日期。如果必须将日历初始化为某个日期,请按以下方式操作:
Calendar cal = Calendar.getInstance();
cal.setTime(date);
请注意,您的日期对象可能与您认为的不同 我们正在使用下面几行代码来查找当前日期和时间,我们这边的工作正常
java.util.Calendar calc = java.util.Calendar.getInstance();
int day = calc.get(java.util.Calendar.DATE);
int month = calc.get(java.util.Calendar.MONTH)+1;
int year = calc.get(java.util.Calendar.YEAR);
String dayStr,monthStr;
if(day<10){
dayStr = "0"+day;
}else{
dayStr = ""+day;
}
if(month<10){
monthStr = "0"+month;
}else{
monthStr = ""+month;
}
/*String currentdate = monthStr+"/"+dayStr+"/"+year+" ";*/
String currentdate = dayStr+"/"+monthStr+"/"+year+" ";
/*String currenttime = currentdate + String.valueOf(calc.get(java.util.Calendar.HOUR_OF_DAY))+ ":"+
String.valueOf(calc.get(java.util.Calendar.MINUTE))+":"+String.valueOf(calc.get(java.util.Calendar.SECOND));*/
return currentdate;
java.util.Calendar calc=java.util.Calendar.getInstance();
int day=calc.get(java.util.Calendar.DATE);
int month=calc.get(java.util.Calendar.month)+1;
int year=calc.get(java.util.Calendar.year);
字符串dayStr,monthStr;
如果(dayJava基于日期的API设计不当。
在未来的版本中,我认为API计划解决一些问题
我建议使用。当使用Calendar.getInstance()创建Calendar对象时,Calendar对象中的实例变量“time”已设置,只有使用
Calendar.setTimeInMillis()函数。
日历对象的代码段:
public long getTimeInMillis() {
if (!isTimeSet) {
updateTime();
}
return time;
}
在这里,当调用Calendar.getInstance()时,“istimet”将变为“true”,并且每次都返回“time”,而不更新时间
这就是为什么你每次打电话都会得到相同的时间值
计算getTimeInMillis()
希望这有帮助。这不是一个bug,日历正在返回它应该返回的内容(至少在这里是这样)
我得到了1333546375707毫秒,这是正确的值(也是手工计算的)。
你在这里期望哪个值?你怎么知道它是错的
为什么要在月份中添加一个?日期和日历的月份都是以零为基础的-无需添加1
编辑
手工计算(近似):
谢谢..我想知道..为什么日历没有返回它应该返回的内容。给定输入数据,日历返回的正是它应该返回的内容。您输入的数据不正确。Date.getMonth()不会在日历对象中为您提供等效的月份。请看..我只使用了getTimeInMillis()当它没有给我正确的答案时,我只是试图找到正确的答案。你使用了calCurr.set(date.getYear()+1900,date.getMonth()+1,date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds());
这是错误的方法。我想知道关于getTimeInMillis()的情况和它的输出。这是真正的捕获…你很好…非常感谢。我也想接受这个答案…你可能没有看到…根据当前日期和时间正确的毫秒是第二个…不是正常的。什么,不,不是。你输出当前日期时间,然后更改它并输出它。我只是运行了代码。它返回数字自1970年1月1日起的r毫秒,00:00:00 GMTIt给出了正确的时间单位为毫秒!今天的日期您期望的毫秒值是多少?我不明白您想要的是什么。您期望的毫秒值是多少,为什么?因为使用普通对象..如果get与equals方法进行比较,即使它们相同,也不会返回true。。更新后..只返回真..所以…看到这个,所以也许你要感谢代码..我不想要代码..我想要解释..为什么第一次calCurr.getTimeInMillis()返回错误。@Frankenstein-你是如何得到这个结果的?@CarlosHeuberger上面给出的问题链接与我的问题是一样的。当一个日历是当前对象时,为什么不给它一个相等的日历,而另一个日历的值是当前日期和数据库中的值。因为它们不相等:第一个是当前时间,第二个是一个月(month+1
)在当前时间之前-您正在将一个添加到月份中!还可以每次打印calCurr.getTime().toString()
以查看差异并添加对问题的答复
Calendar calCurr = Calendar.getInstance();
Log.i("Time in mili of Current - Normal", ""+calCurr.getTimeInMillis());
// see what it gives? dont know why?
Date date = new Date();
calCurr.set(date.getYear()+1900, date.getMonth()+1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
// so added one month to it
2012 - 42 years * 365.24 days/year * 86400 seconds/day
April - (31 + 29 + 31) days * 86400
4th - 3 days * 86400
13:30 - 13.5 hours * 3600 seconds/hour
====================
1333553112 seconds