Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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.util.Calendar类中的一个bug还是什么?_Java_Android_Date_Calendar - Fatal编程技术网

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