原文:寡年-百度百科
指整年没有“立春”的日子就是“盲年”,俗称寡年。又名滑头年
社会上流传的“寡妇年”,是指整个农历年都没有立春的年份。以农历2005年的鸡年为例,立春在公历2月4日,春节要到公历2月9日,而2006年的春节则在立春之前,则2005年农历全年(即上一个春节——公历2005年2月9日到下一个春节——公历2006年1月28日之间)不存在立春日,2005年就被称为“寡妇年”。“寡妇年”只是农历与阳历的巧合,有无立春只是不同历法的时间差造成的。
"寡年不宜嫁娶"只是历史上迷信说法,没有科学道理,大家可以一笑置之。
这篇文章就来证明为什么寡年可以结婚?
每年的阳历2月3~5号,通常是2月4号。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.18</version>
</dependency>
由于立春是阳历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年的日历,发现计算结果正确:
处于某些名字的避讳,这里就不列举某些人名了,其中包含一些大人物的名字,感兴趣可以自己去查。
再看看中国历年的结婚人数,可以发现历史上中国人什么时候结婚跟是否寡年并没有什么关系: