热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通过C++的类设置系统时间和输出时间

#include#includeusingnamespacestd;classTDate{public:voidSetDate(inty,intm,intd);i
#include
#include 
using namespace std;
class TDate
{
public:
	void SetDate(int y,int m,int d);
	int IsLeapYear();
	void SetTime(int h,int m,int s);
	void DisplayTime();
private:
	int year,month,day;
	int hh,min,sec; 
    time_t timep; 
	
/*tm结构在time.h中的定义:
struct tm {
	int tm_sec;  		//秒–取值区间为[0,59] 
	int tm_min;  		//分 - 取值区间为[0,59] 
	int tm_hour;  		//时 - 取值区间为[0,23] 
	int tm_mday; 		//一个月中的日期 - 取值区间为[1,31] 
	int tm_mon; 		//月份(从一月开始,0代表一月) - 取值区间为[0,11] 
	int tm_year; 		//年份,其值从1900开始 
	int tm_wday; 		//星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 
	int tm_yday; 		//从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 
	int tm_isdst; 		//夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。
	long int tm_gmtoff; //指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数
	const char *tm_zone;//当前时区的名字(与环境变量TZ有关)
};*/
    struct tm *p_tm;
	

/*头文件: ;timeval结构的用于指定时间值
struct timeval
{
	time_t tv_sec; 		//秒 [long int]
	suseconds_t tv_usec;//微秒 [long int]
};*/
	struct timeval time_tv;	
};
void TDate::SetDate(int y,int m,int d)
{
	year =y;
	mOnth= m;
	day =d;

/*time() 函数返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数。[1] 
主要用来获取当前的系统时间,返回的结果是一个time_t类型,
其值表示从UTC(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)
到当前时刻的秒数。然后调用localtime函数将time_t所表示的UTC时间转换为本地时间(我们是+8区,比UTC多8个小时)
并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。*/
	timep = time(NULL);
	p_tm = localtime(&timep);
	p_tm->tm_year = y - 1900;
	p_tm->tm_mon = m-1;
	p_tm->tm_mday = d;
	
/*mktime()用来将参数p_tm所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数*/
	timep = mktime(p_tm);
	
	time_tv.tv_sec = timep;
	time_tv.tv_usec = 0;
	
/*
头文件:#include
函数原型:int settimeofday ( const struct timeval *tv,const struct timezone *tz);
settimeofday()会把目前时间设成由tv所指的结构信息,当地时区信息则设成tz所指的结构。
其参数tv是保存设置时间结果的结构体,参数tz用于保存时区结果
注意,只有root权限才能使用此函数修改时间。成功则返回0,失败返回-1,错误代码存于errno。
EPERM 并非由root权限调用settimeofday(),权限不够。
EINVAL 时区或某个数据是不正确的,无法正确设置时间。
如果tv或tz某一项为NULL,表示对相关的信息不感兴趣。*/
	settimeofday(&time_tv,NULL);
	
}
void TDate::SetTime(int h,int m,int s)
{
	hh=h;
	min=m;
	sec=s;
	
	timep = time(NULL);
	p_tm = localtime(&timep);
	p_tm->tm_hour = h;
	p_tm->tm_min = m;
	p_tm->tm_sec = s;
	
	//timep = time(NULL);
	timep = mktime(p_tm);
	
	time_tv.tv_sec = timep;
	time_tv.tv_usec = 0;
	settimeofday(&time_tv,NULL);
}
int TDate::IsLeapYear()
{
	return(year%4==0 && year%100!=0)||(year%400==0);
}
void TDate::DisplayTime()
{
	timep = time(NULL);
	p_tm = localtime(&timep);
	cout <tm_year+1900 <<"年";
	cout <tm_mon+1 <<"月";
	cout <tm_mday <<"日";
	cout <<" " <<"星期" <tm_wday;
	cout <<" " <tm_hour <<":" <tm_min <<":" <tm_sec;
	if(TDate::IsLeapYear()) cout <<" 润年";
	cout <> y >> m >> d >> h >> min >> s;
	date.SetDate(y,m,d);
	date.SetTime(h,min,s);
	date.DisplayTime();
	cout <

通过C++的类设置系统时间和输出时间


推荐阅读
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 使用Jsoup解析并遍历HTML文档时,该库能够高效地生成一个清晰、规范的解析树,即使源HTML文档存在格式问题。Jsoup具备强大的容错能力,能够处理多种异常情况,如未闭合的标签等,确保解析结果的准确性和完整性。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 系统数据实体验证异常:多个实体验证失败的错误处理与分析
    在使用MVC和EF框架进行数据保存时,遇到了 `System.Data.Entity.Validation.DbEntityValidationException` 错误,表明存在一个或多个实体验证失败的情况。本文详细分析了该错误的成因,并提出了有效的处理方法,包括检查实体属性的约束条件、调试日志的使用以及优化数据验证逻辑,以确保数据的一致性和完整性。 ... [详细]
author-avatar
袁怡松_779
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有