我想制作日历视图以支持触摸交互.
因此,我想构建新的自定义日历视图.
我试图使视图偏移量和实际日期值之间的映射功能.
这是我的主意:
如果我可以计算出自基准日期以来的周数(以我的情况为1989-12-31),
很容易知道偏移量. HEIGHT_FOR_WEEK * NUM_OF_WEEK是非常简单的计算
知道确切的偏移量.
我的问题是这样的:
首先,我从基准日期获得了毫秒值.我将毫秒设置为
另一个日历对象.我希望与该对象有相同的日期.但实际上
是不同的日期.
mBaseDateInMillis = mBaseDate.getTimeInMillis();mAnotherDate.setTimeInMillis(mBaseDateInMillis);/* I expect mBaseDate == mAnotherDate. * but it was different. */
这是我的代码:
public class CalendarCoordinate { public static final long ONEWEEK_IN_MILliSECONDS = 60 * 60 * 24 * 7 * 1000; public Calendar mBaseDate = new GregorianCalendar(TimeZone.getTimeZone("GMT")); public long mBaseDateInMillis = 0; public Calendar mDate = new GregorianCalendar(TimeZone.getTimeZone("GMT")); public int mWeekHeight = 30; /** * CTOR */ public CalendarCoordinate() { /* Base date is 1989-12-31 0, 0, 0 * It was Sunday and offset 0 will be mapped onto this day. */ mBaseDate.set(Calendar.MILliSECOND, 0); mBaseDate.set(1989, 12, 31, 0, 0, 0); mBaseDateInMillis = mBaseDate.getTimeInMillis(); Log.v(TAG, "BaseDate:" + mBaseDate.toString()); } /** * Compute DATE from Y-Offset * @param yOffset * @return */ public Calendar dateFromYOffset(int yOffset) { long nthWeeks = yOffset / mWeekHeight; long millsSinceBaseDate = nthWeeks * ONEWEEK_IN_MILliSECONDS; mDate.clear(); mDate.set(Calendar.MILliSECOND, 0); mDate.setTimeInMillis(mBaseDateInMillis + millsSinceBaseDate); /* We SHOulD call to update mDate internal data structure. * Java is really strange for this thing **/ mDate.getTimeInMillis(); return mDate; } /** * Compute Y-Offset from DATE * @param date * @return */ public long yOffsetFromDate(Calendar cal) { long mills = cal.getTimeInMillis(); long nthWeeks = (mills - mBaseDateInMillis)/ONEWEEK_IN_MILliSECONDS; return nthWeeks * mWeekHeight; }}
有人可以帮助我吗?我不是一个好的Java程序员.
解决方法:
这句话使我感到困惑:
/* I expect mBaseDate == mAnotherDate. * but it was different. */
您是否真的想通过比较来检查是否相等:
如果(mBaseDate == mAnotherDate){System.out.println(“它们是相同的”); }
如果是这样,您的问题是您误解了“ ==”运算符在Java中的工作方式.它比较引用,而不是比较基础对象数据,并且由于这些对象是不同的对象(具有相同的值),因此始终为假.有关更多详细信息,请参见Java Notes on comparison operators.
另外,这些行对我来说真的很可疑:
/* We SHOulD call to update mDate internal data structure. * Java is really strange for this thing**/mDate.getTimeInMillis();
如果AndroID出现需要您执行此 *** 作的错误,我会感到非常惊讶,但是我想一切皆有可能.没有这个电话,您会遇到什么问题?
总结以上是内存溢出为你收集整理的Android java.util.Calendar-时差全部内容,希望文章能够帮你解决Android java.util.Calendar-时差所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)