`
zhanglm
  • 浏览: 76048 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

外包业务中,关于夏令时的处理

    博客分类:
  • java
阅读更多

业务表中的记录是按小时统计的,做成报表时需要group 成按天统计的。

在夏令时开始和结束的时,他们的某一天的时间间隔不是24小时(在开始时小于24小时,结束时大于24小时或者说开始时候把表往前拨一段时间,结束时往回拨一段时间)。

 

一般的做法就是循环判断TimeZone.inDaylightTime(Date)是否处于夏令时内。

找出分界点的那一天,再根据TimeZone.getDSTSavings()去计算 dayOfDayLightSavingEnd 。

 

当然,jdk的TimeZone信息是自己会自动更新的。如果在mysql里的time_zone添加数据的话,需要自己手动去更新。

 

 

import java.util.TimeZone;


public class Test {

	public static void main(String[] args) {
	    
	   Test t=new Test();
	   String timeCondition= t.calcTimeCondition(1235894400, 1238569200, TimeZone.getTimeZone("America/Los_Angeles"));
	   System.out.println(timeCondition);
	  
	}

	/**
	 * split the time period which use "case when" clause ,if the start and end time are not in the same dst .
	 * it is must be appended a alias name for this time condition.example =>" as ts," 
	 * @param startTime 
	 * @param endTime
	 * @param timeZone=>the timezone of client 
	 * @return time condition expression . 
	 */
	public String calcTimeCondition(int startTime,int endTime,TimeZone timeZone){
	    
	    String defaultTimeCondition=generateTimeCondition(startTime);
	    //not use dst
	    if(timeZone.useDaylightTime()==false)
	    {
	        return defaultTimeCondition;
	    }
	    //in the same dst
	    if(daylightTimeState(startTime, timeZone)==daylightTimeState(endTime, timeZone))
	    {
	        return defaultTimeCondition;
	    }
	    // not in the same dst
        int dayOfDayLightSavingStart = startTime, dayOfDayLightSavingEnd = endTime;
        int dayStartTime = startTime;
        for (int i = startTime; i <= endTime; i += 86400)
        {
            //dst start
            if (daylightTimeState(dayStartTime, timeZone) == false && daylightTimeState(i, timeZone) == true)
            {
                dayOfDayLightSavingStart = dayStartTime;
                dayOfDayLightSavingEnd = i - (int) (timeZone.getDSTSavings() / 1000);
                break;
            }
            //dst end
            else if (daylightTimeState(dayStartTime, timeZone) == true && daylightTimeState(i, timeZone) == false)
            {
                dayOfDayLightSavingStart = dayStartTime;
                dayOfDayLightSavingEnd = i + (int) (timeZone.getDSTSavings() / 1000);
                break;
            }
            dayStartTime = i;
        }
        String timeCondition = " Case " +
                            		" WHEN time_stamp>"+startTime+" AND time_stamp<="+dayOfDayLightSavingStart+" THEN "+
                            		    defaultTimeCondition+
                            		" WHEN time_stamp>"+dayOfDayLightSavingStart+" AND time_stamp<="+dayOfDayLightSavingEnd+" THEN "+
                            		    dayOfDayLightSavingStart+
                            		" WHEN time_stamp>"+dayOfDayLightSavingEnd+" AND time_stamp<="+endTime+" THEN "+
                            		    generateTimeCondition(dayOfDayLightSavingEnd)+
                                " END ";
	    
        return timeCondition;
	    
	}
	
	
    private boolean daylightTimeState(int timeStamp, TimeZone tz)
    {
        return tz.inDaylightTime(new java.util.Date(1000L * timeStamp));
    }
    /**
     * CEIL is used to project the time stamp to the end of the period, after which it is
     * shifted back to the start of the period, in order to ensure that time stamps that fall
     * on a one-minute boundary are treated as belonging to the previous minute.
     * @param startTime
     * @return
     */
    private String generateTimeCondition(int startTime){
        StringBuilder condition=new  StringBuilder();
        condition.append(startTime).append("+86400*(CEIL((time_stamp -").append(startTime).append(")/86400) - 1)");
        return condition.toString();
    }
    
}
分享到:
评论

相关推荐

    业务外包概述.pptx

    9. **会计控制**:在整个外包过程中,会计控制至关重要,它包括对外包合同的财务管理,对付款和验收的控制,以及在必要时终止合同和处理索赔的程序。 业务外包不仅是一种经济策略,也是一种管理策略。在实施过程中...

    医院外包业务管理质量安全评估报告内部审计报告及工作改进实例.pdf

    医院外包业务管理质量安全评估报告内部审计报告及工作改进实例.pdf

    外包业务管理制度

    为使本公司外包项目管理更加规范合理,约束参与外包项目人员的行为,确保项目外包期间公司信誉的维护,并提升业务效率,实现项目外包的战略目标,特制定本制度

    医院外包业务项目评估和审核制度(终审稿).doc

    医院外包业务项目评估和审核制度(终审稿).doc

    外包业务系统专科毕业设计

    在这个设计中,学生将使用Microsoft Visual Basic 6.0作为编程工具,结合数据库技术来构建一个能够处理外包业务的管理系统。 【数据库】:数据库是外包业务系统的核心组成部分,用于存储和管理所有业务相关的数据,...

    CSDN外包业务的发展建议(mini).ppt

    【标题解析】:“CSDN外包业务的发展建议(mini).ppt”这个标题表明这是一个关于CSDN(中国软件开发网络)外包业务发展的建议性演示文稿。CSDN是中国一个知名的IT技术社区,其外包业务可能包括软件开发、项目管理等...

    银行外包服务管理应急预案.pdf

    【银行外包服务管理应急预案】是银行业为应对外包服务过程中可能出现的风险和紧急情况而制定的管理策略。预案旨在确保银行业务系统的稳定运行,强化外包管理,防止因外包问题导致的服务中断或协议终止,最大限度地...

    原创 《外包业务整体管理方案》

    ### 外包业务整体管理方案 #### 一、软件外包的目的及特点 **目的:** - **降低成本**:通过利用外部资源,降低内部研发成本。 - **提高质量和效率**:专业外包商通常拥有更高的技术水平和丰富的项目管理经验,...

    服务外包业务管理系统.doc

    Business Logic Layer 负责业务逻辑的处理,包括服务外包业务操作流程、意见反馈等。Data Access Layer 负责数据的访问和存储,包括对服务外包业务数据的存储和访问等。 服务外包业务管理系统的开发可以使用Java、...

    外包业务管理制度.doc

    3. 成立外包业务归口管理部门:外包项目计划书通过审核后,成立外包业务归口管理部门,由业务部门负责人、有关咨询专家、外包项目协调管理人员、合同协商管理人员等组成,必要时还应包括法律及财会专业人员。...

    医院外包业务管理制度汇编.doc

    同时,该制度强调不涉及工程项目外包,且明确了各部门在外包业务管理中的角色和职责。 其次,医院各部门在外包业务管理中扮演着不同的角色。院办公室作为总协调部门,负责外包的总体管理,而纪检监察室、审计科则...

    医院外包业务项目评估和审核制度.doc

    医院外包业务项目评估和审核制度是医疗机构在进行非核心业务委托给外部公司处理时所遵循的一套严谨的管理和决策流程。这一制度旨在确保外包业务的经济性和可行性,同时避免核心业务的流失,保障医院运营的稳定性和...

    SK公司软件外包业务的战略研究.doc

    在软件外包业务的战略研究中,需要考虑的因素包括: 1. 政策和法规因素:软件外包业务受到政策和法规的制约,例如税务政策、劳动法等。 2. 经济因素:软件外包业务受到经济环境的影响,例如经济增长、通货膨胀、...

    行业数据-2018年全球现下与计划中的外包业务.rar

    本压缩包文件“行业数据-2018年全球现下与计划中的外包业务.rar”包含了一份名为“行业数据-2018年全球现下与计划中的外包业务.xls”的Excel表格,这份资料提供了2018年全球外包业务的详细信息,涵盖了各个国家和...

    养老院外包业务管理制度汇编.doc

    养老院的外包业务管理制度旨在规范其日常运营中部分非核心业务的委托行为,以实现专业化分工、降低成本、提高效率。这一制度涵盖了外包业务的定义、部门职责、不相容岗位、风险管理和外包业务的评估与审核等多个方面...

    私募基金公司业务外包管理规定含外包机构遴选业务规划风险评估.docx

    此文档详细阐述了私募基金公司如何管理和评估外包业务,包括业务规划、外包机构遴选、内控及风险管理等方面。 首先,私募基金公司在进行业务外包时,必须遵守《基金法》、《私募投资基金监督管理暂行办法》等相关...

    贷款催收外包业务风险及防范借鉴.pdf

    三、当前外包业务中存在的问题及潜在的风险 (一)外包业务内部控制制度建设有待加强。银行外包业务管理办法不够细化,缺乏立项、可行性研究、审批及执行监控等环节规定,特别是缺乏具体的实施细则和操作流程以及...

    业务外包授权审批制度.pdf

    外包业务费用支付的授权审批环节,归口管理部门负责初步确认付款申请,部门负责人和法律顾问审核后,由财务部门进行复审并分层次提交审批。审批金额的阈值决定了审批人,从总裁到董事长再到董事会或股东(大)会,...

Global site tag (gtag.js) - Google Analytics