<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java要多思考下

    成長(zhǎng)^_^

       ::  :: 新隨筆 ::  ::  :: 管理 ::
      33 隨筆 :: 0 文章 :: 19 評(píng)論 :: 0 Trackbacks
    最近項(xiàng)目中實(shí)現(xiàn)了一個(gè)課程表的功能,核心功能如下:
    1、需要記錄一周里每天每個(gè)時(shí)段的課程安排,后臺(tái)錄入
    2、課程開始前,需要自動(dòng)給課程關(guān)注者以各種提醒

    于是采用了這樣的實(shí)現(xiàn)方案:
    1、錄入時(shí)間只記錄當(dāng)天的時(shí)分秒對(duì)應(yīng)的毫秒數(shù)(這樣入庫(kù)的時(shí)間實(shí)際上是1970-01-01 HH:mm:ss)
    2、定時(shí)任務(wù)根據(jù)當(dāng)天所在的周數(shù)查詢當(dāng)天的課程安排,并將課程時(shí)間換算成當(dāng)天的時(shí)間(2015-09-08 HH:mm:ss),然后執(zhí)行提醒的業(yè)務(wù)

    很簡(jiǎn)單的一個(gè)功能,但是因?yàn)闀r(shí)區(qū)問(wèn)題出現(xiàn)了以下奇葩現(xiàn)象:

    比如1970-01-01 10:00:00被最終換算成了1970-01-01 10:30:00
    也就是說(shuō)每一個(gè)入庫(kù)時(shí)間取出后都增加了不多不少半個(gè)小時(shí)

    于是開始看java.util.Date源碼,一探究竟,發(fā)現(xiàn)有這樣一段:
            BaseCalendar cal = getCalendarSystem(year);
                if (tzoffset == -1)  { // no time zone specified, have to use local
            BaseCalendar.Date ldate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef());

    注意到TimeZone.getDefaultRef(),源碼如下:
        public static TimeZone getDefault() {
            return (TimeZone) getDefaultRef().clone();
        }

        /**
         * Returns the reference to the default TimeZone object. This
         * method doesn't create a clone.
         
    */
        static TimeZone getDefaultRef() {
        TimeZone defaultZone = defaultZoneTL.get();
        if (defaultZone == null) {
            defaultZone = defaultTimeZone;
            if (defaultZone == null) {
            // Need to initialize the default time zone.
            defaultZone = setDefaultZone();
            assert defaultZone != null;
            }
        }
        // Don't clone here.
        return defaultZone;
        }

    推測(cè)很有可能問(wèn)題出在時(shí)區(qū)的選擇設(shè)置上,于是打印出來(lái)結(jié)果如下:
    sun.util.calendar.ZoneInfo[id="Asia/Harbin",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
    果然如此,服務(wù)器時(shí)區(qū)錯(cuò)誤,于是指出這個(gè)錯(cuò)誤,讓運(yùn)維修正的。
    不過(guò)還是擔(dān)心運(yùn)維層面帶來(lái)類似的錯(cuò)誤,于是手動(dòng)設(shè)置了時(shí)區(qū):

        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
            logger.info("the default timezone info [{}]", TimeZone.getDefault());

    技術(shù)文章收藏站點(diǎn)












    posted on 2015-09-08 23:03 java要多思考下 閱讀(6794) 評(píng)論(1)  編輯  收藏 所屬分類: 技術(shù)研究

    評(píng)論

    # re: 【原】JAVA時(shí)區(qū)設(shè)置及時(shí)區(qū)不一致帶來(lái)的奇葩現(xiàn)象 2015-09-14 08:42 Kizi 2
    Recent projects implemented in the function of a curriculum, the core functions are as follows  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲日韩中文无码久久| 成人一a毛片免费视频| 亚洲一区二区三区AV无码| 色天使亚洲综合一区二区| 成人免费777777| 亚洲午夜成人精品无码色欲| 国产免费不卡v片在线观看| 亚洲国产成人在线视频 | 亚洲一级片免费看| 亚洲中文字幕一二三四区苍井空| 无码人妻久久一区二区三区免费 | 亚洲精品不卡视频| 亚洲一级免费视频| 亚洲欧洲日本在线观看| 香蕉视频在线观看免费国产婷婷 | 亚洲综合色区中文字幕| 丁香花在线观看免费观看| 亚洲高清国产拍精品熟女| 免费不卡中文字幕在线| www免费黄色网| 精品亚洲国产成AV人片传媒| 国产精品成人观看视频免费| 在线精品亚洲一区二区| 免费一区二区三区四区五区| 中文字幕手机在线免费看电影| 亚洲精品自产拍在线观看动漫| 无码人妻一区二区三区免费手机| 精品韩国亚洲av无码不卡区| 超清首页国产亚洲丝袜| 最近免费mv在线电影| 亚洲精品无码一区二区| 亚洲亚洲人成综合网络| 亚州免费一级毛片| 朝桐光亚洲专区在线中文字幕| 国产亚洲精品久久久久秋霞| 久久成人国产精品免费软件| 美女扒开屁股让男人桶爽免费 | 国产aⅴ无码专区亚洲av麻豆| 最近2018中文字幕免费视频| 亚洲日韩国产欧美一区二区三区| 久久久久亚洲AV成人网|