Android java.util.Calendar-时差

Android java.util.Calendar-时差,第1张

概述我想制作日历视图以支持触摸交互.因此,我想构建新的自定义日历视图.我试图使视图偏移量和实际日期值之间的映射功能.这是我的主意:如果我可以计算出自基准日期以来的周数(以我的情况为1989-12-31),很容易知道偏移量.HEIGHT_FOR_WEEK*NUM_OF_WEEK是非常简单的计算知道确切的偏移

我想制作日历视图以支持触摸交互.
因此,我想构建新的自定义日历视图.
我试图使视图偏移量和实际日期值之间的映射功能.

这是我的主意:
如果我可以计算出自基准日期以来的周数(以我的情况为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-时差所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1094080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存