寡年是否适合结婚?寡妇年结婚有什么禁忌吗?让程序来告诉你有多少人是寡妇年结婚的。

什么是寡年?

百度百科

原文:寡年-百度百科

指整年没有“立春”的日子就是“盲年”,俗称寡年。又名滑头年

社会上流传的“寡妇年”,是指整个农历年都没有立春的年份。以农历2005年的鸡年为例,立春在公历2月4日,春节要到公历2月9日,而2006年的春节则在立春之前,则2005年农历全年(即上一个春节——公历2005年2月9日到下一个春节——公历2006年1月28日之间)不存在立春日,2005年就被称为“寡妇年”。“寡妇年”只是农历与阳历的巧合,有无立春只是不同历法的时间差造成的。

有何禁忌?

"寡年不宜嫁娶"只是历史上迷信说法,没有科学道理,大家可以一笑置之。

这篇文章就来证明为什么寡年可以结婚?

立春是什么时候?

每年的阳历2月3~5号,通常是2月4号。
寡年是否适合结婚?寡妇年结婚有什么禁忌吗?让程序来告诉你有多少人是寡妇年结婚的。_第1张图片

计算寡年

添加pom依赖

<dependency>
    <groupId>cn.hutoolgroupId>
    <artifactId>hutool-allartifactId>
    <version>5.8.18version> 
dependency>

java实现

由于立春是阳历2月3~5号,为了计算方便,取2月4号作为立春,这会存在极小的误差,若要降低误差,可改代码。

import cn.hutool.core.date.ChineseDate;
import lombok.Data;
import org.apache.commons.collections.CollectionUtils;

import java.util.*;
import java.util.stream.Collectors;

/**
 * Description : 检查寡年
 * Version : 0.1
 * Date: 2023-12-15 09:49
 */
public class CheckGuaYear {

    public static void main(String[] args) {
        List<YearEntity> allYears = checkYearsLunar(1900, 2050);
        List<YearEntity> guaYears = filterGuaYears(allYears);
        guaYears.forEach(year -> System.out.println("寡年 " + year.getYear() + " 的农历日期是 " + year.getLunarYear() + " 年 "
                + year.getLunarMonth() + " " + year.getLunarDay() + " 日"));
    }

    /**
     * 计算农历年月日
     *
     * @param startYear 起始年份
     * @param endYear   终止年份
     * @return list
     */
    public static List<YearEntity> checkYearsLunar(int startYear, int endYear) {
        if (startYear < 0 || endYear < 0 || startYear > endYear) {
            return null;
        }
        List<YearEntity> yearList = new ArrayList<>();
        for (int i = startYear; i <= endYear; i++) {
            // 使用Hutool进行阳历到农历的转换,年、月(注意月份是从0开始计数)、日
            ChineseDate chineseDate = new ChineseDate(new Date(i - 1900, 1, 4));
            int lunarYear = chineseDate.getChineseYear();
            String lunarMonth = chineseDate.getChineseMonth();
            String lunarDay = chineseDate.getChineseDay();
            YearEntity guaYear = new YearEntity();
            guaYear.setYear(i);
            guaYear.setLunarYear(lunarYear);
            guaYear.setLunarMonth(lunarMonth);
            guaYear.setLunarDay(lunarDay);
            yearList.add(guaYear);
        }
        return yearList;
    }

    /**
     * 过滤寡年
     *
     * @param years 所有年份
     * @return 所有寡年
     */
    public static List<YearEntity> filterGuaYears(List<YearEntity> years) {
        if (CollectionUtils.isEmpty(years)) {
            return new ArrayList<>();
        }
        //汇总所有的有立春的农历年份
        Set<Integer> lunarYearSet = years.stream()
//                .filter(year->{
//                    Objects.requireNonNull(year, "year is null");
//                    String lunarMonth = Objects.requireNonNull(year.getLunarMonth(), "lunarMonth is null");
//                    String lunarDay = Objects.requireNonNull(year.getLunarDay(), "lunarDay is null");
//                    //如果需要精确计算,需要考虑十二月三十和正月初一,因为有些年份的立春是阳历2月3~5号
//                    return !Objects.equals("十二月", lunarMonth) || !Objects.equals("三十", lunarDay);
//                })
                .map(YearEntity::getLunarYear)
                .collect(Collectors.toSet());

        return years.stream()
                .filter(item -> {
                    int year = item.getYear();
                    //如果这一年里没有农历对应的立春,则为寡年
                    boolean isGuaYear = lunarYearSet.contains(year);
                    item.setGuaYear(isGuaYear);
                    return !isGuaYear;
                }).collect(Collectors.toList());
    }


}

/**
 * 年份实体类
 */
@Data
class YearEntity {
    /**
     * 阳历年份
     */
    private int year;
    /**
     * 农历年份
     */
    private int lunarYear;
    /**
     * 农历月份
     */
    private String lunarMonth;
    /**
     * 农历日
     */
    private String lunarDay;
    /**
     * 是否寡年:true-是
     */
    private boolean isGuaYear;
}

寡年年份

寡年 1902 的农历日期是 1901 年 十二月 廿七 日
寡年 1904 的农历日期是 1903 年 十二月 二十 日
寡年 1907 的农历日期是 1906 年 十二月 廿三 日
寡年 1910 的农历日期是 1909 年 十二月 廿六 日
寡年 1913 的农历日期是 1912 年 十二月 三十 日
寡年 1915 的农历日期是 1914 年 十二月 廿二 日
寡年 1918 的农历日期是 1917 年 十二月 廿四 日
寡年 1921 的农历日期是 1920 年 十二月 廿八 日
寡年 1923 的农历日期是 1922 年 十二月 二十 日
寡年 1926 的农历日期是 1925 年 十二月 廿三 日
寡年 1929 的农历日期是 1928 年 十二月 廿六 日
寡年 1932 的农历日期是 1931 年 十二月 廿九 日
寡年 1934 的农历日期是 1933 年 十二月 廿二 日
寡年 1937 的农历日期是 1936 年 十二月 廿四 日
寡年 1940 的农历日期是 1939 年 十二月 廿八 日
寡年 1942 的农历日期是 1941 年 十二月 二十 日
寡年 1945 的农历日期是 1944 年 十二月 廿三 日
寡年 1948 的农历日期是 1947 年 十二月 廿六 日
寡年 1951 的农历日期是 1950 年 十二月 廿九 日
寡年 1953 的农历日期是 1952 年 十二月 廿二 日
寡年 1956 的农历日期是 1955 年 十二月 廿四 日
寡年 1959 的农历日期是 1958 年 十二月 廿八 日
寡年 1961 的农历日期是 1960 年 十二月 二十 日
寡年 1964 的农历日期是 1963 年 十二月 廿二 日
寡年 1967 的农历日期是 1966 年 十二月 廿六 日
寡年 1970 的农历日期是 1969 年 十二月 廿八 日
寡年 1972 的农历日期是 1971 年 十二月 二十 日
寡年 1975 的农历日期是 1974 年 十二月 廿四 日
寡年 1978 的农历日期是 1977 年 十二月 廿七 日
寡年 1981 的农历日期是 1980 年 十二月 三十 日
寡年 1983 的农历日期是 1982 年 十二月 廿二 日
寡年 1986 的农历日期是 1985 年 十二月 廿六 日
寡年 1989 的农历日期是 1988 年 十二月 廿八 日
寡年 1991 的农历日期是 1990 年 十二月 二十 日
寡年 1994 的农历日期是 1993 年 十二月 廿四 日
寡年 1997 的农历日期是 1996 年 十二月 廿七 日
寡年 2000 的农历日期是 1999 年 十二月 廿九 日
寡年 2002 的农历日期是 2001 年 十二月 廿三 日
寡年 2005 的农历日期是 2004 年 十二月 廿六 日
寡年 2008 的农历日期是 2007 年 十二月 廿八 日
寡年 2010 的农历日期是 2009 年 十二月 廿一 日
寡年 2013 的农历日期是 2012 年 十二月 廿四 日
寡年 2016 的农历日期是 2015 年 十二月 廿六 日
寡年 2019 的农历日期是 2018 年 十二月 三十 日
寡年 2021 的农历日期是 2020 年 十二月 廿三 日
寡年 2024 的农历日期是 2023 年 十二月 廿五 日
寡年 2027 的农历日期是 2026 年 十二月 廿八 日
寡年 2029 的农历日期是 2028 年 十二月 廿一 日
寡年 2032 的农历日期是 2031 年 十二月 廿三 日
寡年 2035 的农历日期是 2034 年 十二月 廿七 日
寡年 2037 的农历日期是 2036 年 十二月 二十 日
寡年 2040 的农历日期是 2039 年 十二月 廿二 日
寡年 2043 的农历日期是 2042 年 十二月 廿五 日
寡年 2046 的农历日期是 2045 年 十二月 廿九 日
寡年 2048 的农历日期是 2047 年 十二月 廿一 日

可以看出,从1900年到2050年的寡年分别有:
[1902, 1904, 1907, 1910, 1913, 1915, 1918, 1921, 1923, 1926, 1929, 1932, 1934, 1937, 1940, 1942, 1945, 1948, 1951, 1953, 1956, 1959, 1961, 1964, 1967, 1970, 1972, 1975, 1978, 1981, 1983, 1986, 1989, 1991, 1994, 1997, 2000, 2002, 2005, 2008, 2010, 2013, 2016, 2019, 2021, 2024, 2027, 2029, 2032, 2035, 2037, 2040, 2043, 2046, 2048]

可以看出,100年内寡年还是比较多的,也就是身边近40%的人可能是寡年出生或者结婚的。

对比2024年的日历,发现计算结果正确:
寡年是否适合结婚?寡妇年结婚有什么禁忌吗?让程序来告诉你有多少人是寡妇年结婚的。_第2张图片

哪些名人在寡年结婚/出生?

处于某些名字的避讳,这里就不列举某些人名了,其中包含一些大人物的名字,感兴趣可以自己去查。

再看看中国历年的结婚人数,可以发现历史上中国人什么时候结婚跟是否寡年并没有什么关系:
寡年是否适合结婚?寡妇年结婚有什么禁忌吗?让程序来告诉你有多少人是寡妇年结婚的。_第3张图片

你可能感兴趣的:(java,程序人生)