取得日期对应的星期数

我这个方法有点小取巧,只取1900-01-01年后的数据,之前的的日期需要重新计算一下。

1、先取出输入的日期距离1900-01-01的天数

        private static int GetDays(int year, int month, int day)
        {
            //1900-1-1是星期一
            int result = 0;
            int[] month31 = {1,3,5,7,8,10,12};
            int[] month30 = {4,6,9,11};
            const int YEAR = 1900;
            const int MONTH = 1;
            const int DAY = 1;

            //先按整年计算*****************************************
            result += (year - YEAR) * 365;
            for (int i = YEAR; i < year; i++)
            {
                if (IsLeapYear(i))
                {
                    ++result;
                }
            }

            //计算月份********************************************
            if (month > MONTH)
            {
                for (int i = MONTH; i < month; i++)
                {
                    if (i == 2 && IsLeapYear(year))
                    {
                        result += 29;
                    }
                    else
                    {
                        result += 28;
                    }

                    if (month30.Contains(i))
                    {
                        result += 30;
                    }

                    if (month31.Contains(i))
                    {
                        result += 31;
                    }
                }
            }
            else
            {
                //月份相等的情况,不可能有月份小于1,不需要做任何运算,在下面的日计算直接计算即可
            }

            //计算日*********************************
            result += day - DAY;

            return result;
        }

2、将天数差对7取余,比如相差1900-01-07和1900-01-01相差7天,那么取余得到0,说明是星期天,

如果是1900-01-08,则取余为1,说明和1900-01-01是同一个星期,即星期一

        /// <summary>
        /// 根据天数差获取是星期几
        /// </summary>
        /// <param name="days">天数差</param>
        /// <param name="weekInt">取余后的数</param>
        /// <returns></returns>
        private static string GetWeekDay(int days,out int weekInt)
        {
            Dictionary<int, string> weekDic = new Dictionary<int, string>();
            weekDic.Add(1, "星期一");
            weekDic.Add(2, "星期二");
            weekDic.Add(3, "星期三");
            weekDic.Add(4, "星期四");
            weekDic.Add(5, "星期五");
            weekDic.Add(6, "星期六");
            weekDic.Add(7, "星期天");
            weekInt = days % 7 == 0 ? 7 : days % 7;
            return weekDic[weekInt];
        }

3、输出结果

                Console.WriteLine("请输入一个日期:");
                string dateStr = Console.ReadLine();
                string[] dateArray = dateStr.Split(‘-‘);
                int year = int.Parse(dateArray[0]);
                int month = int.Parse(dateArray[1]);
                int day = int.Parse(dateArray[2]);
                int days = GetDays(year, month, day);
                int weekInt = 0;
                Console.WriteLine("距离1900-1-1,有" + days + "天的时间");
                Console.WriteLine("这一天是" + GetWeekDay(days, out weekInt));

可以用在js计算星期上。

时间: 2024-08-02 03:11:31

取得日期对应的星期数的相关文章

蔡勒(Zeller)公式及其推导:快速将任意日期转换为星期数

0. 本文的初衷及蔡勒公式的用处 前一段时间,我在准备北邮计算机考研复试的时候,做了几道与日期计算相关的题目,在这个过程中我接触到了蔡勒公式.先简单的介绍一下蔡勒公式是干什么用的. 我们有时候会遇到这样的问题:看到一个日期想知道这一天是星期几,甚至看到一个历史日期或纪念日,我们想快速的知道这一天是星期几.对于这个问题,如果用编程的方式,应该怎么实现呢?你可能已经有思路了,比如你知道某个日期是星期几,把这个日期作为原点,然后计算目标日期和这个原点之间相差多少天,再除以 7 求余数,最后通过余数判断

java实现输入一个时间段,以及相应的星期数,获得这个时间段中这些星期的日期

最近在做毕设,遇到一个问题.对于给定的一个时间段和特定的星期,我需要获得这个时间段中所有的给定星期的日期. 比如,获得从2015-01-01到2015-01-21所有的星期一和星期二的日期. package com.cc.common; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class WeekDayUtil { /** * 输入一个日期的时间段

四个很好用的Sql Server 日期函数:DateDiff、DatePart、DateAdd、DateName

我以前查一段时间范围内的数据都是在程序里计算好日期再掉查询语句,现在我用下面的函数.SQL SERVER没有查一季度数据的函数. DateDiff函数: 描述 返回两个日期之间的时间间隔. 语法 DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]]) DateDiff 函数的语法有以下参数: 参数 描述 interval 必选.字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔.有关数值,请参

(3.16)SQL语句中所有有关日期 、时间的用法

DateAdd 函数描述:返回已添加指定时间间隔的日期. 语法DateAdd(interval, number, date)interval: 必选.字符串表达式,表示要添加的时间间隔.有关数值,请参阅“设置”部分. number: 必选.数值表达式,表示要添加的时间间隔的个数.数值表达式可以是正数(得到未来的日期)或负数(得到过去的日期). date: 必选.Variant 或要添加 interval 的表示日期的文字. interval 参数可以有以下值:yyyy (年) .q (季度) .

java报表工具FineReport常用函数的用法总结(文本和日期函数)

FineReport是比较常用的java报表开发工具,本文总结了常用函数中的文本和日期函数 文本函数 CHAR CHAR(number):根据指定数字返回对应的字符.CHAR函数可将计算机其他类型的数字代码转换为字符. Number:用于指定字符的数字,介于1Number:用于指定字符的数字,介于165535之间(包括1和65535). 示例: CHAR(88)等于"X". CHAR(45)等于"-". CODE CODE(text):计算文本串中第一个字符的数字代

数据库的基本操作

一.简单查询语句 格式:select *| 具体的列名 as [别名] from 表名称 防止重复查询结果的关键字:distinct  (用法:用于列表的前面) 二.限定查询 格式:select *| 具体的列名 from 表名称 where 条件表达式 null:表示该列中没有值 三.in关键字 语法:select * from 表名称 where 列名 in (值1,值2...) select * from 表名称 where 列名 not in (值1,值2...) 四.模糊查询 关键字:

MySQL(5.6) 函数

字符串函数 ASCII(str) 说明:返回字符串 str 最左边字符的 ASCII 值 mysql> SELECT ASCII('2'); -> 50 mysql> SELECT ASCII(2); -> 50 mysql> SELECT ASCII('a'); -> 97 mysql> SELECT ASCII(''); -> 0 mysql> SELECT ASCII(NULL); -> NULL BIN(N) 说明:返回数值 N 的二进制

《MySQL 必知必会》读书总结

这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. ? ? 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter password:****** 显示数据库 mysql>SHOW DATABASES; 选择数据库 mysql>USE mytest; 显示数据库中的表 mysql>SHOW TABLES; 显示表列 mysql>SHOW COLUMNS FROM tmall_user; mysql

python第五章

一.字符串格式化 1.字符串格式化使用字符串格式化操作符,即%来实现.在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值.可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或者字典.一般情况下使用元组: >>> format = 'Hello, %s. %s enough for ya?' >>> values = ('world', 'Hot') >>> print format % values Hello, world