取得指定月份的第一天与取得指定月份的最后一天

该博客提供了Java代码实现日期处理功能。包含获取指定月份第一天和最后一天的方法,以及常用的日期格式化方法,可按指定格式格式化日期,若格式化出错会打印日志和异常信息。

    /**
     * 取得指定月份的第一天
     *
     * @param strdate String
     * @return String
     */
    public String getMonthBegin(String strdate)
    {
        java.util.Date date = parseFormatDate(strdate);
        return formatDateByFormat(date,"yyyy-MM") + "-01";
    }

    /**
     * 取得指定月份的最后一天
     *
     * @param strdate String
     * @return String
     */
    public String getMonthEnd(String strdate)
    {
        java.util.Date date = parseFormatDate(getMonthBegin(strdate));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH,1);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return formatDate(calendar.getTime());
    }

    /**
     * 常用的格式化日期
     *
     * @param date Date
     * @return String
     */
    public String formatDate(java.util.Date date)
    {
        return formatDateByFormat(date,"yyyy-MM-dd");
    }

    /**
     * 以指定的格式来格式化日期
     *
     * @param date Date
     * @param format String
     * @return String
     */
    public String formatDateByFormat(java.util.Date date,String format)
    {
        String result = "";
        if(date != null)
        {
            try
            {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
                result = sdf.format(date);
            }
            catch(Exception ex)
            {
                LOGGER.info("date:" + date);
                ex.printStackTrace();
            }
        }
        return result;
    }

### PostgreSQL 中获取某个月份最后一天的方法 在 PostgreSQL 中,可以通过多种方式来获取某个月份最后一天。以下是几种常用方法: #### 方法一:基于 `DATE_TRUNC` 和 `INTERVAL` 通过组合使用 `DATE_TRUNC` 函数和 `INTERVAL` 来计算给定月份第一天,然后加上一个月减去一天即可得到该月的最后一天。 ```sql SELECT (DATE_TRUNC('MONTH', '2024-07-15'::date) + INTERVAL '1 MONTH - 1 DAY')::DATE; ``` 这段 SQL 语句会返回 2024 年 7 月的最后一天[^1]。 #### 方法二:利用 `generate_series` 创建日期序列 如果需要处理一系列连续月份的情况,则可以先创建一个包含这些月份起始日的序列,然后再应用上述逻辑求得各月月末的具体日期。 ```sql WITH date_series AS ( SELECT generate_series( '2024-01-01'::date, '2024-12-31'::date, interval '1 month' ) AS start_of_month ) SELECT start_of_month, (start_of_month + INTERVAL '1 MONTH - 1 DAY')::DATE as end_of_month FROM date_series; ``` 此查询将生成从年初至年末每个月初及其对应的月底两个字段的结果集[^2]。 #### 方法三:自定义函数实现特定需求 对于更复杂的需求场景,比如只考虑工作日作为每月最后一个有效交易日的情形,还可以编写存储过程或用户定义的功能来进行定制化处理。 ```plpgsql CREATE OR REPLACE FUNCTION get_mon_max_day(iyear INTEGER, imonth INTEGER) RETURNS DATE LANGUAGE plpgsql AS $$ DECLARE last_date DATE := (to_char(make_interval(years => iyear - 1900, months => imonth - 1), '%Y-%m-01')::date + INTERVAL '1 MONTH - 1 DAY'); BEGIN RETURN CASE WHEN EXTRACT(DOW FROM last_date) BETWEEN 1 AND 5 THEN last_date ELSE last_date - ((EXTRACT(DOW FROM last_date)::INT % 6) + 1) END; END $$; ``` 调用这个函数时传入年份月份参数就能获得相应期间内最近的一个周五作为输出结果[^3]。 以上就是关于如何在 PostgreSQL 数据库里边取得任意指定月份最后一日的不同解决方案介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值