`
sun201200204
  • 浏览: 299930 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

计算时间

    博客分类:
  • java
阅读更多
http://www.blogjava.net/rrong-m/articles/281288.html



import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
/**
* 功能:计算时间
*     上月开始、上月结束、
*     本月开始、本月结束、
*     上周开始、上周结束、
*     本周开始、本周结束、
*     昨天开始、昨天结束、
*     今天开始、今天结束
*
* @version 2009-12-07
*
*/

public class StartAndEndOfDate {
    
    public static enum DateTag {
        LAST_MONTH_START,
        LAST_MONTH_END,
        THIS_MONTH_START,
        THIS_MONTH_END,
        LAST_WEEK_START,
        LAST_WEEK_END,
        THIS_WEEK_START,
        THIS_WEEK_END,
        LAST_DAY_START,
        LAST_DAY_END,
        THIS_DAY_START,
        THIS_DAY_END,
        THIS_DATE
    };
    
    /**
     * 功能:计算时间
     * 上月开始、上月结束、本月开始、本月结束、
     * 上周开始、上周结束、本周开始、本周结束、
     * 昨天开始、昨天结束、今天开始、今天结束
     * 格式:2007-06-01 00:00:00  2007-06-30 23:59:59
     * 本月结束、本周结束、今天结束 都指的是当前日期时间
     * 一周按照:星期一至星期天来计算
     *        由于Calendar中星期是从Sunday开始算的。
     *           所以上周的结束时间是这一周Calendar的start时间。
     *              本周的结束时间是下一周Calendar的start时间。
     * @param tag
     * @return String
     */
    public static String getStartAndEndDate(DateTag tag, Date date){
        String resultString;
        Calendar cal = Calendar.getInstance();
        Date nowdate = new Date();
        java.text.DateFormat formatFull = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String now = formatFull.format(nowdate);
        String this_date = formatFull.format(date);
        java.text.DateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
        switch (tag){
            case LAST_MONTH_START://上月开始
                cal.add(Calendar.MONTH, -1); 
//                cal.set(Calendar.DATE, 1); 
                cal.set(Calendar.DAY_OF_MONTH, 1);
                
                String lastMonthStart = format.format(cal.getTime())+" 00:00:00";//上月开始(上月1号)
                cal.clear();
                resultString = lastMonthStart;
                break;
            case LAST_MONTH_END://上月结束
                cal=Calendar.getInstance();
                cal.add(Calendar.MONTH, -1); 
                cal.set(Calendar.DATE,cal.getActualMaximum(Calendar.DAY_OF_MONTH));
                String lastMonthEnd = format.format(cal.getTime())+" 23:59:59";//上月结束(上月最后一天)
                cal.clear();
                resultString = lastMonthEnd;
                break;
            case THIS_MONTH_START://本月开始
                cal=Calendar.getInstance();
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
//                cal.add(Calendar.MONDAY,0);
//                cal.set(Calendar.DAY_OF_MONTH, 1); 
                String thisMonthStart = format.format(cal.getTime())+" 00:00:00";//本月开始(本月1号)
                cal.clear();
                resultString = thisMonthStart;
                break;
            case THIS_MONTH_END://本月结束
                cal=Calendar.getInstance();
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
                String thisMonthEnd = format.format(cal.getTime())+" 00:00:00";//本月开始(本月1号)
                cal.clear();
                //validate
                try {
                    if(formatFull.parse(thisMonthEnd).after(nowdate)){
                        thisMonthEnd = now;//今天结束(即;当前时间)
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                resultString = thisMonthEnd;
                break;
            case LAST_WEEK_START://上周开始
                cal=Calendar.getInstance();
                cal.add(Calendar.WEEK_OF_YEAR, -1);
                /**
                 * Calendar.SUNDAY  1
                 * Calendar.MONDAY  2
                 */
                cal.set(Calendar.DAY_OF_WEEK, 2);
//                cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
                String lastWeekStart = format.format(cal.getTime())+" 00:00:00";//上周开始(即:上周一)
                cal.clear();
                resultString = lastWeekStart;
                break;
            case LAST_WEEK_END://上周结束
                cal=Calendar.getInstance();
//                cal.add(Calendar.WEEK_OF_YEAR, 0);
                cal.set(Calendar.DAY_OF_WEEK, 1);
//                cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
                String lastWeekEnd = format.format(cal.getTime())+" 23:59:59";//上周结束(即:上周日)
                cal.clear();
                resultString = lastWeekEnd;
                break;
            case THIS_WEEK_START://本周开始
                cal=Calendar.getInstance();
//                cal.add(Calendar.WEEK_OF_YEAR, 0);
                cal.set(Calendar.DAY_OF_WEEK, 2);
//                cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
                String thisWeekStart = format.format(cal.getTime())+" 00:00:00";
                cal.clear();
                resultString = thisWeekStart;
                break;
            case THIS_WEEK_END://本周结束  即下一周的Calendar开始时间
                cal=Calendar.getInstance();
                cal.add(Calendar.WEEK_OF_YEAR, 1);
                cal.set(Calendar.DAY_OF_WEEK, 1);
                String thisWeekEnd = format.format(cal.getTime())+" 23:59:59";
                cal.clear();
                //validate
                try {
                    if(formatFull.parse(thisWeekEnd).after(nowdate)){
                        thisWeekEnd = now;//今天结束(即;当前时间)
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                resultString = thisWeekEnd;
                break;
            case LAST_DAY_START://昨天开始
                cal = Calendar.getInstance();
//                cal.add(Calendar.DAY_OF_MONTH, -1);
//                cal.add(Calendar.DAY_OF_WEEK, -1);
                cal.add(Calendar.DAY_OF_YEAR, -1);
                format = new java.text.SimpleDateFormat("yyyy-MM-dd");
                String yesterdayStart= format.format(cal.getTime());
                yesterdayStart = yesterdayStart+" 00:00:00";//昨天开始
                cal.clear();
                resultString = yesterdayStart;
                break;
            case LAST_DAY_END://昨天结束
                cal = Calendar.getInstance();
                cal.add(Calendar.DAY_OF_MONTH, -1);
                format = new java.text.SimpleDateFormat("yyyy-MM-dd");
                String yesterdayEnd= format.format(cal.getTime());
                yesterdayEnd = yesterdayEnd+" 23:59:59";//昨天结束
                cal.clear();
                resultString = yesterdayEnd;
                break;
            case THIS_DAY_START://今天开始
                String todayStart=format.format(date)+" 00:00:00";//今天开始
                resultString = todayStart;
                break;
            case THIS_DAY_END://今天结束
                String todayEnd = format.format(date)+" 23:59:59";//今天开始
                try {
                    if(formatFull.parse(todayEnd).after(nowdate)){
                        todayEnd = now;//今天结束(即;当前时间)
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                resultString = todayEnd;
                break;
            default://没有匹配的,返回当前时间
                resultString = this_date;
        }
        return resultString;
    }
    
    public static void main(String[] args) {
        Date date = new Date();
//        String last_month_start = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.LAST_MONTH_START);
        String this_month_end = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.THIS_MONTH_END,date);
//        String last_week_start = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.LAST_WEEK_START);
        String last_week_end = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.LAST_WEEK_END,date);
//        String this_week_start = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.THIS_WEEK_START);
        String this_week_end = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.THIS_WEEK_END,date);
//        String yesterday_start = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.YESTERDAY_START,date);
        String today_end = StartAndEndOfDate.getStartAndEndDate(StartAndEndOfDate.DateTag.THIS_DAY_END,date);
        
        System.out.println(this_month_end);
    }
}


分享到:
评论

相关推荐

    例5-2 计算时间差.rar_labview_labview时间差_sugarz2l_例5-2 计算时间差_计算时间差

    在本例“例5-2 计算时间差”中,我们关注的是如何在LabVIEW中计算两个时间点之间的时间差。 在LabVIEW中,时间差的计算通常涉及时间戳的使用。时间戳是表示某一时刻的数值,可以是绝对时间(自某个固定日期以来的...

    matlab开发-计算时间间隔差异

    在MATLAB中,计算时间间隔差异是一个常见的任务,特别是在处理日期和时间数据时。这个话题主要涉及以下几个核心知识点: 1. **日期和时间类**: MATLAB提供了`datetime`类,用于表示日期和时间。这个类提供了丰富的...

    CTime计算时间差

    ### CTime计算时间差 在C++编程语言中,处理时间相关的操作是非常常见的需求之一,尤其是在需要计算两个时刻之间的时间差的应用场景下。本篇文章将详细介绍如何利用MFC(Microsoft Foundation Classes)中的`CTime`...

    labview计算时间输入控件与当前时间的差值,并以HH:MM:SS形式的字符串显示

    本示例——"labview计算时间输入控件与当前时间的差值,并以HH:MM:SS形式的字符串显示",旨在教你如何在LabVIEW中实现这一功能。以下是对这个知识点的详细讲解: 首先,我们需要理解LabVIEW中的时间表示。在LabVIEW...

    LS-DYNA缩短计算时间的方法

    LS-DYNA缩短计算时间的方法,用于ANSYS/LS-DYNA数值模拟时计算时间过大使用

    fft的计算时间

    在本文中,我们将深入探讨FFT的计算时间,以及如何根据不同的数据点数来评估其效率。 首先,我们需要理解FFT的基本原理。FFT是DFT的一种分治算法,它将一个N点的DFT分解为较小的子问题,通过递归地应用相同的操作,...

    昆仑通态案例记录开始结束时间并计算时间差

    昆仑通态案例记录开始结束时间并计算时间差

    VC精准算时间差函数

    根据给定的文件标题、描述、标签以及部分内容,本文将详细介绍如何在Visual C++(VC)环境下实现一个精准计算时间差的函数。 ### 一、背景介绍 在Visual C++ (VC) 开发环境中,微软并没有提供直接用于精确计算两个...

    DTCalculator v1.0┊日期时间计算器┊计算时间差或者推算时间点

    软件名称:DTCalculator v1.0┊日期时间计算器┊计算时间差或者推算时间点 软件大小:207KB 软件类型:绿色免费软件 适用平台:Windows 作 者:Meron 作者邮箱:meronmee@163.com 软件截图: 软件简介: 想想这样...

    【MIKE小工具】-计算时间步数-晏长街

    这个小工具是为了在建立MIKE水动力模型时更方便的计算时间步长和时间步数。你可以自行修改模拟开始时间和模拟结束时间,这时会自动计算出时间差;然后再分别输入天数、小时数、分钟数,这时就会将时间差转换为以秒计...

    NOR及装卸时间(LAYTIME)计算.pdf

    NOR的递交时间和装卸时间(LAYTIME)的计算对于租船合同双方的利益至关重要,因为这直接关系到滞期费的计算。以下是关于NOR和装卸时间计算的关键知识点: 1. NOR的递交时间: - 通常情况下,船东的义务是在抵达第...

    c++ 计算时间差值CTime(本科作业)

    在本本科作业中,你将学习如何使用`CTime`类来计算两个日期时间之间的差值,并以多种方式显示这个时间差。 首先,让我们了解一下`CTime`类的基本用法。`CTime`对象可以表示一个特定的日期和时间,包括年、月、日、...

    FFT算法(严格控制计算时间)

    预计算旋转因子可以进一步优化性能,尤其是在实时处理或嵌入式系统中。 "FFT.h"文件很可能是头文件,其中定义了FFT函数的接口,供其他模块调用。在C语言中,头文件通常包含函数声明、数据结构定义和常量声明等,...

    读IO电平定时器算时间.zip_超声波模块 STM32

    本压缩包文件"读IO电平定时器算时间.zip_超声波模块 STM32"提供了关于如何利用STM32微控制器与超声波模块进行交互并计算时间间隔的知识。 1. 超声波模块工作原理: 超声波模块通常由发射器和接收器组成,它发送一个...

    互信息法计算延迟时间

    在本主题中,我们将深入探讨如何使用互信息法在MATLAB环境中计算这种延迟时间。 互信息是一种衡量两个随机变量之间依赖程度的度量,它不依赖于任何特定的变量分布,并且是非对称的。在时间序列分析中,互信息可以...

    按键精灵手机助手计算时间差

    把附件放在按键精灵手机助手里面的Plugin文件夹里,在...t1 = GetNetworkTime() //获取网络时间 //自定义时间必须为字符串,格式为"yyyy-mm-dd HH:MM:SS" t2 = "2024-03-01 02:18:20" TracePrint SC.ShiJianCha(t1,t2)

    js计算两个时间的时间差

    ### 描述:“js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差” 虽然描述部分重复了“js计算时间差”这一短语,但从上下文中我们可以理解到,这段...

    MPI.rar_并行计算时间

    在这个“MPI.rar_并行计算时间”压缩包中,我们重点关注的是如何利用MPI来测量并行计算的时间性能。 MPI提供了一套标准的函数和数据类型,使得开发者可以在不同的并行计算平台上编写可移植的代码。在并行计算时间的...

    易语言源码多次计算时间.rar

    《易语言源码:深入解析多次计算时间》 在编程领域,尤其是在易语言环境中,对时间的处理是一项基础且重要的任务。"易语言源码多次计算时间.rar"这个压缩包文件,显然包含了与时间计算相关的源代码,可能是为了演示...

    计算时间工具类

    计算,周,日,年时间段,计算时间区间问题,关于计算通话秒数

Global site tag (gtag.js) - Google Analytics