首页 > 其他分享 >日志:已知某天是星期几,不使用时间函数计算一个日期是星期几

日志:已知某天是星期几,不使用时间函数计算一个日期是星期几

时间:2024-01-08 16:35:45浏览次数:28  
标签:星期 rs int ry rm 日志 某天 Ydiff


背景:

2003年记录的小程序
已知某天是星期几,不使用时间函数计算一个日期是星期几。
不知道谁写的函数,有些复杂了,但运行正常。
觉得先计算已知日期当年1月1号是星期几,再加上间隔年份+闰年数+所求日期是一年中的第几天比较简单。

代码
#include<iostream>
#include<conio.h>
using namespace std;

//2003年记录的小程序
// 已知某天是星期几,不使用时间函数计算一个日期是星期几。
//不知道谁写的函数,有些复杂了,但运行正常。
//觉得先计算已知日期的1月1号是星期几,再加上年份+闰年数比较简单。
const char* getWeekDay(int rd, int rm, int ry);
int mainWeekDay()
{
	int rd,  rm,  ry;
	cout << "Enter REQUIRED date (DD MM YYYY) : ";
	cin >> rd >> rm >> ry;

	cout << "It's a " << getWeekDay( rd,  rm,  ry) << " !!";

	return getchar();
}
const char* getWeekDay(int rd, int rm, int ry) {
	int Ydiff, Ddiff, Mdiff;
	const char* DAY[7] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };
	int cd, cm, cy, cs,  rs, i;
	cd = 19; cm = 2; cy = 2001; cs = 2; // setting 19 feb 2001 , Monday
	// difference in years
	Ydiff = cy - ry;
	// find no of leap years
	if (cy >= ry)
	{
		for (i = cy; i >= ry; i--)
		{
			if ((i % 100) == 0) // for a century
			{
				if ((i % 400) == 0) { Ydiff++; }
			}
			else
			{
				if ((i % 4) == 0) { Ydiff++; }
			}
		}
	}
	else
	{
		for (i = cy; i < ry; i++)
		{
			if ((i % 100) == 0) // for a century
			{
				if ((i % 400) == 0) { Ydiff--; }
			}
			else
			{
				if ((i % 4) == 0) { Ydiff--; }
			}
		}
	}

	Ydiff = Ydiff % 7;//years*(365%7=1)+leap years  ----重要:年份+闰年数
	Ddiff = (cd - rd) % 7;
	rs = cs - (Ydiff + Ddiff) % 7;
	rs = rs % 7;
	//difference in months
	Mdiff = cm - rm;
	if (Mdiff < 0)
	{
		for (i = cm; i < rm; i++)
		{
			switch (i)
			{
//... 省略若干行
			}
		}
		rs = rs % 7;
	}
	else if (Mdiff > 0)
	{
		for (i = cm; i > rm; i--)
		{
			switch (i)
			{
//... 省略若干行
			}
		}
		rs = rs % 7;
	}
	if (rs <= 0) { rs = 7 + rs; }

	const char* weekDay = DAY[rs - 1];
	return weekDay;
}

标签:星期,rs,int,ry,rm,日志,某天,Ydiff
From: https://blog.51cto.com/u_15720208/9146707

相关文章

  • Android课程设计-安卓旅行日志APP+源代码+文档说明
    项目介绍简单的项目功能介绍:用户注册:邮箱填写、邮箱填写、密码填写、用户登录、用户忘记密码创建记事本:编写记事本、修改记事本、删除记事本、上传记事本数据管理:通过云服务器找回被删除的数据、本地笔记上传到云端、选择删除云端数据天气预报:获取用户当前位置的3天以内的天气情......
  • 利用枚举,输入 1~7,输出对应星期几,否则输出 err
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>enum{ MONDAY=1, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};intmain(){ while(1) { intn=0; printf("请输入1-7的数,0退出\n"); scanf("%d",&n); s......
  • 用 Go 编写日志中间件的指南
    这是关于如何为GoWeb服务编写可扩展日志记录中间件的指南。我收到了很多请求,要求向gorilla/mux添加内置记录器并扩展gorilla/handlers记录的内容,但它们很难分类。许多要求都是针对不同的事情,因为记录“什么”、记录多少以及使用哪个库并不是所有人都同意的。此外,特别是在mux的情......
  • day28 基于Loki的日志收集系统-基于Loki特性的场景变现及优化 (9.8-9.9)
    9.8-基于Loki的日志收集系统一、EFKvsLPG架构和组件Loki:Loki是一个开源的水平可扩展日志聚合系统,由Promtail、Loki和Grafana组成。EFK:EFK是一个集成的解决方案,由Elasticsearch、Fluentd和Kibana组成。存储和查询:Loki:Loki使用基于日志流的存储方式,将日志数据存储为可压......
  • 如何使用loki查询日志中大于某一数字的值的日志
    简介loki是一款轻量级的日志收集中间件,比elk体系占用的内存更小,采用go语言开发,可以利用grafana来查询loki中存储的日志,loki存储日志只对提前预设的标签做索引,所以日志存储空间占用比elk小很多。方法loki只对提前预设的标签做索引,但如果我们想给标签之外的文本根据其值代表的数......
  • 日志模块
    日志模块1.什么是日志? #记录你的代码在执行过程中的一些变化(记录的是一些有意义的变化)2.日志如何学习? #只需要回CV即可,复制代码会改代码即可3.日志的等级 importlogginglogging.debug('debugmessage') #10logging.info('infomessage') #20......
  • MySQL三大日志,mvcc、DateTime 类型等
    1、MySQL事务隔离级别详解解决幻读的方法解决幻读的方式有很多,但是它们的核心思想就是一个事务在操作某张表数据的时候,另外一个事务不允许新增或者删除这张表中的数据了。解决幻读的方式主要有以下几种:将事务隔离级别调整为 SERIALIZABLE 。在可重复读的事务级别下,给事务操......
  • 无论删除配置文件,Laravel 8在生产环境中仍无法禁用日志记录
    如果你已经在.env文件中设置了LOG_CHANNEL=null和LOG_LEVEL=null,并且在Laravel8中仍然无法禁用日志记录,可以尝试以下几个方法:phpartisanconfig:clearphpartisancache:clear这将清除配置和缓存,确保您的更改生效。检查环境:确保你正在修改正确的环境文件。在生......
  • 支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石
    这是《百图解码支付系统设计与实现》专栏系列文章中的第(7)篇。在一家头部互联网公司发现一些工作多年的同学打印的日志也是乱七八糟的,所以聊聊这个话题。本文主要讲结构清晰的日志在支付系统中的重要作用,设计日志规范需要遵守的一些基本原则,以及接口摘要日志、业务摘要日志、详细日......
  • 分布式日志追踪ID实战 | 京东物流技术团队
    本文通过介绍分布式应用下各个场景的全局日志ID透传思路,以及介绍分布式日志追踪ID简单实现原理和实战效果,从而达到通过提高日志查询排查问题的效率。背景开发排查系统问题用得最多的手段就是查看系统日志,相信不少人都值过班当过小秘吧:给下接口和出入参吧,麻烦看看日志里的有没有异常......