自己写的一个简单的日期工具类,做报表的同学也许会用到。
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * * @author px * @date 2010-04-26 * */ public class DateUtils { private static final Log logger = LogFactory.getLog(DateUtils.class); public static final String YYYYMMDD = "yyyy-MM-dd"; public static final String YYYYMMDD_ZH = "yyyy年MM月dd日"; public static final int FIRST_DAY_OF_WEEK = Calendar.MONDAY; //中国周一是一周的第一天 /** * * @param strDate * @return */ public static Date parseDate(String strDate) { return parseDate(strDate, null); } /** * parseDate * * @param strDate * @param pattern * @return */ public static Date parseDate(String strDate, String pattern) { Date date = null; try { if(pattern == null) { pattern = YYYYMMDD; } SimpleDateFormat format = new SimpleDateFormat(pattern); date = format.parse(strDate); } catch (Exception e) { logger.error("parseDate error:" + e); } return date; } /** * format date * * @param date * @return */ public static String formatDate(Date date) { return formatDate(date, null); } /** * format date * * @param date * @param pattern * @return */ public static String formatDate(Date date, String pattern) { String strDate = null; try { if(pattern == null) { pattern = YYYYMMDD; } SimpleDateFormat format = new SimpleDateFormat(pattern); strDate = format.format(date); } catch (Exception e) { logger.error("formatDate error:", e); } return strDate; } /** * 取得一年的第几周 * * @param date * @return */ public static int getWeekOfYear(Date date){ Calendar c = Calendar.getInstance(); c.setTime(date); int week_of_year = c.get(Calendar.WEEK_OF_YEAR); return week_of_year - 1; } /** * getWeekBeginAndEndDate * * @param date * @param pattern * @return */ public static String getWeekBeginAndEndDate(Date date, String pattern){ Date monday = getMondayOfWeek(date); Date sunday = getSundayOfWeek(date); return formatDate(monday, pattern) + " - " + formatDate(sunday, pattern) ; } /** * 根据日期取得对应周周一日期 * * @param date * @return */ public static Date getMondayOfWeek(Date date) { Calendar monday = Calendar.getInstance(); monday.setTime(date); monday.setFirstDayOfWeek(FIRST_DAY_OF_WEEK); monday.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return monday.getTime(); } /** * 根据日期取得对应周周日日期 * * @param date * @return */ public static Date getSundayOfWeek(Date date) { Calendar sunday = Calendar.getInstance(); sunday.setTime(date); sunday.setFirstDayOfWeek(FIRST_DAY_OF_WEEK); sunday.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); return sunday.getTime(); } /** * 取得月的剩余天数 * * @param date * @return */ public static int getRemainDayOfMonth(Date date) { int dayOfMonth = getDayOfMonth(date); int day = getPassDayOfMonth(date); return dayOfMonth - day; } /** * 取得月已经过的天数 * * @param date * @return */ public static int getPassDayOfMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.DAY_OF_MONTH); } /** * 取得月天数 * * @param date * @return */ public static int getDayOfMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.getActualMaximum(Calendar.DAY_OF_MONTH); } /** * 取得月第一天 * * @param date * @return */ public static Date getFirstDateOfMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH)); return c.getTime(); } /** * 取得月最后一天 * * @param date * @return */ public static Date getLastDateOfMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH)); return c.getTime(); } /** * 取得季度第一天 * * @param date * @return */ public static Date getFirstDateOfSeason(Date date) { return getFirstDateOfMonth(getSeasonDate(date)[0]); } /** * 取得季度最后一天 * * @param date * @return */ public static Date getLastDateOfSeason(Date date) { return getLastDateOfMonth(getSeasonDate(date)[2]); } /** * 取得季度天数 * @param date * @return */ public static int getDayOfSeason(Date date) { int day = 0; Date[] seasonDates = getSeasonDate(date); for (Date date2 : seasonDates) { day += getDayOfMonth(date2); } return day; } /** * 取得季度剩余天数 * * @param date * @return */ public static int getRemainDayOfSeason(Date date) { return getDayOfSeason(date) - getPassDayOfSeason(date); } /** * 取得季度已过天数 * * @param date * @return */ public static int getPassDayOfSeason(Date date) { int day = 0; Date[] seasonDates = getSeasonDate(date); Calendar c = Calendar.getInstance(); c.setTime(date); int month = c.get(Calendar.MONTH); if(month == Calendar.JANUARY || month == Calendar.APRIL || month == Calendar.JULY || month == Calendar.OCTOBER) {//季度第一个月 day = getPassDayOfMonth(seasonDates[0]); } else if(month == Calendar.FEBRUARY || month == Calendar.MAY || month == Calendar.AUGUST || month == Calendar.NOVEMBER) {//季度第二个月 day = getDayOfMonth(seasonDates[0]) + getPassDayOfMonth(seasonDates[1]); } else if(month == Calendar.MARCH || month == Calendar.JUNE || month == Calendar.SEPTEMBER || month == Calendar.DECEMBER) {//季度第三个月 day = getDayOfMonth(seasonDates[0]) + getDayOfMonth(seasonDates[1]) + getPassDayOfMonth(seasonDates[2]); } return day; } /** * 取得季度月 * * @param date * @return */ public static Date[] getSeasonDate(Date date) { Date[] season = new Date[3]; Calendar c = Calendar.getInstance(); c.setTime(date); int nSeason = getSeason(date); if(nSeason == 1) {//第一季度 c.set(Calendar.MONTH, Calendar.JANUARY); season[0] = c.getTime(); c.set(Calendar.MONTH, Calendar.FEBRUARY); season[1] = c.getTime(); c.set(Calendar.MONTH, Calendar.MARCH); season[2] = c.getTime(); } else if(nSeason == 2) {//第二季度 c.set(Calendar.MONTH, Calendar.APRIL); season[0] = c.getTime(); c.set(Calendar.MONTH, Calendar.MAY); season[1] = c.getTime(); c.set(Calendar.MONTH, Calendar.JUNE); season[2] = c.getTime(); } else if(nSeason == 3) {//第三季度 c.set(Calendar.MONTH, Calendar.JULY); season[0] = c.getTime(); c.set(Calendar.MONTH, Calendar.AUGUST); season[1] = c.getTime(); c.set(Calendar.MONTH, Calendar.SEPTEMBER); season[2] = c.getTime(); } else if(nSeason == 4) {//第四季度 c.set(Calendar.MONTH, Calendar.OCTOBER); season[0] = c.getTime(); c.set(Calendar.MONTH, Calendar.NOVEMBER); season[1] = c.getTime(); c.set(Calendar.MONTH, Calendar.DECEMBER); season[2] = c.getTime(); } return season; } /** * * 1 第一季度 2 第二季度 3 第三季度 4 第四季度 * * @param date * @return */ public static int getSeason(Date date) { int season = 0; Calendar c = Calendar.getInstance(); c.setTime(date); int month = c.get(Calendar.MONTH); switch (month) { case Calendar.JANUARY: case Calendar.FEBRUARY: case Calendar.MARCH: season = 1; break; case Calendar.APRIL: case Calendar.MAY: case Calendar.JUNE: season = 2; break; case Calendar.JULY: case Calendar.AUGUST: case Calendar.SEPTEMBER: season = 3; break; case Calendar.OCTOBER: case Calendar.NOVEMBER: case Calendar.DECEMBER: season = 4; break; default: break; } return season; } public static void main(String[] args) { String strDate = "2010-03-26"; Date date = parseDate(strDate); System.out.println(strDate + " 是一年的第几周?" + getWeekOfYear(date)); System.out.println(strDate + " 所在周起始结束日期?" + getWeekBeginAndEndDate(date, "yyyy年MM月dd日")); System.out.println(strDate + " 所在周周一是?" + formatDate(getMondayOfWeek(date))); System.out.println(strDate + " 所在周周日是?" + formatDate(getSundayOfWeek(date))); System.out.println(strDate + " 当月第一天日期?" + formatDate(getFirstDateOfMonth(date))); System.out.println(strDate + " 当月最后一天日期?" + formatDate(getLastDateOfMonth(date))); System.out.println(strDate + " 当月天数?" + getDayOfMonth(date)); System.out.println(strDate + " 当月已过多少天?" + getPassDayOfMonth(date)); System.out.println(strDate + " 当月剩余多少天?" + getRemainDayOfMonth(date)); System.out.println(strDate + " 所在季度第一天日期?" + formatDate(getFirstDateOfSeason(date))); System.out.println(strDate + " 所在季度最后一天日期?" + formatDate(getLastDateOfSeason(date))); System.out.println(strDate + " 所在季度天数?" + getDayOfSeason(date)); System.out.println(strDate + " 所在季度已过多少天?" + getPassDayOfSeason(date)); System.out.println(strDate + " 所在季度剩余多少天?" + getRemainDayOfSeason(date)); System.out.println(strDate + " 是第几季度?" + getSeason(date)); System.out.println(strDate + " 所在季度月份?" + formatDate(getSeasonDate(date)[0], "yyyy年MM月") + "/" + formatDate(getSeasonDate(date)[1], "yyyy年MM月") + "/" + formatDate(getSeasonDate(date)[2], "yyyy年MM月")); } }
相关推荐
下面是一个简单的示例代码片段,展示了如何计算给定日期所在周和月的起止时间: ```cpp #include void GetWeekAndMonthRange(COleDateTime date) { // 计算周的起止时间 COleDateTime startOfWeek(date); int ...
总之,“周月旬计算”不仅是数据库编程中的一个技术点,更是数据分析和业务规划中不可或缺的工具。通过理解和掌握其背后的算法和逻辑,可以极大地提升数据处理的效率和准确性,为企业决策提供有力的支持。
`DATEADD(interval, number, date)`函数允许我们基于现有的日期向后或向前增加一个特定的时间间隔,其中`interval`可以是`day`、`month`、`year`等,`number`是间隔的数量,`date`是我们想要操作的基准日期。...
6. `CROSS`: 判断两个数值是否发生交叉,即一个值从下方穿过另一个值。 接下来,我们分析源码的主要部分: 1. `A` 和 `YA`: 分别计算出当前K线与上一个周的起点和上一个月的起点相距多少周期。 2. `JA` 通过 `MOD...
这可能需要一个自定义的水平滚动视图,并结合日期逻辑处理滑动事件,确保正确跳转到前一周或后一周。 4. **显示节假日**:这需要一个节假日数据库或API,用于获取特定日期的节假日信息。开发者可以预先加载节假日...
在Android开发中,创建一个类似小米日历的周月视图切换功能是一项常见的需求,它涉及到用户界面(UI)设计、时间与日期处理以及自定义控件的开发。本项目"Android 仿小米日历周月视图切换"旨在实现这样一个功能,...
日期工具类,用于查询传过来的日期前后推移过的日期,
本项目针对公司的特定需求,实现了一个功能丰富的日历视图,支持周月切换,农历显示,节假日标注,以及日期自定义标记。以下是这个定制日历组件的关键知识点和实现细节: 1. **周月切换**:此功能允许用户在周视图...
"通达信指标公式源码日周月K线同图指标" ...通达信指标公式源码日周月K线同图指标是一种复杂的技术指标,提供了一个综合的市场分析工具。该指标可以用于趋势分析、阻力支撑分析和均价分析等多种投资策略。
在实际应用中,获取时间并以周月日展示可能会结合到用户界面设计中,比如创建一个仪表盘显示当前日期和星期,或者在日志文件名中包含日期以便追踪。通过LabVIEW的面板(Front Panel)设计和控件,我们可以将这些时间...
总的来说,“周月量价”指标是一个综合了成交量、价格变动和时间周期的分析工具,可以帮助投资者更全面地了解市场动态,但必须结合个人的投资策略和市场环境进行解读。通过不断学习和实践,投资者可以逐步掌握这个...
淘宝信誉批量查询周月版,时速3000 批量查询周月交易点数
本文档提供了一个基于KDJ指标的日周月共振通达信指标公式源码,用于股票市场的技术分析。KDJ指标是一种常用的技术指标,用于衡量股票的强弱程度。通过本文档提供的公式,我们可以生成日、周、月三个时间周期的KDJ...
本文将深入探讨如何实现一个自定义的日历控件,支持左右无限滑动、周月切换、标记日期显示以及自定义显示效果,并能够跳转到指定日期。 首先,我们关注的是自定义日历的样式。自定义日历控件允许开发者根据应用的...
在本文档中,作者提供了多个RSI计算公式,包括日RSI、周RSI和月RSI,每个公式都有其特点和应用场景。 日RSI公式:VA1:=HHV(HIGH,9)-LLV(LOW,9); VA2:=HHV(HIGH,9)-CLOSE; VA3:=CLOSE-LLV(LOW,9); VA4:=VA2/VA1*100-...
在Android开发中,创建一个可自定义的日历控件是一个常见的需求,特别是在处理与日期、时间相关的应用中,如日程管理、排班系统等。本文将深入探讨如何实现一个功能丰富的日历方案,包括支持农历、自定义日历控件、...
1. RSV(相对强弱值)计算:RSV = (收盘价 - 9周期最低价) / (9周期最高价 - 9周期最低价) * 100,这个值表示了当前价格相对于过去9天价格范围的位置。 2. K线计算:SMA(RSV, 3, 1),即RSV的3日简单移动平均,表示...
本文档提供的是一个KDJ日周月同共振金叉的指标公式源码,KDJ指标是股市技术分析中常用的一种动量振荡器,用于判断股票的超买超卖状态和市场趋势。 KDJ指标由三部分组成:K线、D线和J线。其中,K线代表快速线,D线...
通达信是一种专业的技术分析平台,提供了多种技术指标和图表工具,用于股票、期货、外汇、股票指数等金融市场的分析和预测。本文档提供了MACD、KDJ 日周月共振副图指标的源码公式,用于在通达信平台上创建MACD、KDJ ...
- `AG:=DAY(DAY,1)` 定义了一个布尔变量,表示当前日期是否小于前一天。 - `BG:=BARSLAST(AG)+1` 计算满足 `AG` 条件的最近一次日期到当前的周期数,加上1代表包括当前日期。 - `MH` 和 `ML` 根据 `BG` 计算这一...