使用C ++获取当前日期和时间

问题描述 投票:0回答:2

我正在做一个学校项目,它基本上记录了员工(特定公司)的进出时间。员工在办理入住或退房时应输入专门为他生成的独特钥匙,以便其他人无法办理入住和退房手续。对他来说。然后参考员工职位(工人或经理或类似的东西),计算他每天的总工作时间,为期一周和一个月。公司从早上8点开始,到第一班的下午5点结束,从下午3点30分到凌晨2点30分结束第二班。周六和周日休息。

然后在一个月后,程序引用存储在文件中的工作时间日期并计算他的工资(对于工人的每小时工资和管理人员的工资)。如果员工一直迟到,则会将详细信息转发给人力资源帐户(以便采取必要的步骤)。这将有助于公司记录员工工作时间的详细信息,并提供足够的详细信息,以便在某些人总是迟到时采取行动。

我这样做是作为一个学校项目,它不需要是企业级和所有..但我希望编码执行它应该。我也被迫使用旧的Turbo C ++。

现在,我被记录在员工进出时间的地方。

这种编码可以完成工作

void main( )
{
clrscr();
char dateStr [9],timeStr [9];
_strdate( dateStr);
cout<<" The current date is "<<dateStr<<'\n';
_strtime( timeStr );
cout<<" The current time is "<<timeStr<<'\n';
getch();
}

我在网上的某个地方看到了它,但是有人可以帮我理解它是如何工作的。

我还看到了另一种编码

typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;

#include <Windows.h>
#include <stdio.h>

int main()
{
SYSTEMTIME st;
GetSystemTime(&st);
printf("Year:%dnMonth:%dnDate:%dnHour:%dnMin:%dnSecond:% dn" 
st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);                                                                                                        
}

我认为第二个更好,因为它不仅给了我约会,而且给了我一天,所以我可以轻松地检查周末。

所以帮助我理解这些时间函数是如何工作的。如果您对我的项目有任何建议,欢迎他们。

c++ project turbo-c++
2个回答
0
投票

您需要确定要存储这些时钟“事件”的格式,包括内存存储和操作以及持久(磁盘上)存储格式。当您对内存和磁盘(或数据库内)存储使用不同的格式时,您将使用方法来“编组”或“序列化”/“反序列化”数据(查找并阅读这些术语) 。您还想确定这些日期时间“事件”是以UTC(祖鲁时间,格林威治标准时间)还是当地时间存储或显示。您可能会发现以UTC格式存储这些“时间戳”是最好的,然后您需要函数/方法/例程来将人类可读的可显示值转换为/从本地时间到UTC时间。

考虑定义具有上述方法的“类”。您的类应该有一种方法来记录当前时间,转换为人类可读,并序列化/反序列化数据。

尽管printf在C ++中工作,但您可能希望使用在第一个示例中使用的流操作符,因为它们更符合C ++的精神。考虑定义一个解析方法来反序列化数据,并使用to_string方法(ruby使用to_s)来序列化(虽然读取流操作符重载,并且重载'<<'运算符更多是C ++方式)。


0
投票

第一个使用C库函数(虽然Microsoft扩展到标准libc)。第二个使用winapi函数GetSytemTime

两者都会给系统时间。

我要看的第一件事是代码的其余部分使用的内容。你应该区分什么是winapi代码,C代码和C ++代码,目前你的问题使用了三者的混合。

首选C ++方法(如果您打算用C ++编写),这将是使用更新的库。 C方法是按照你的第一个例子,虽然没有将libc函数与流操作符混合(c ++特性)。 winapi方法是根据你的第二个例子(我将原谅使用printf,因为FormatMessage是一种痛苦)。

© www.soinside.com 2019 - 2024. All rights reserved.