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

时间:2014-12-30 15:13:18

标签: c++ project turbo-c++

我正在做一个学校项目,它基本上记录了员工(特定公司)的进出时间。员工在办理入住或退房时应输入专门为他生成的独特钥匙,以便其他人无法检查然后参考员工职位(工人或经理或类似的东西),计算他每天的总工作时间,为期一周和一个月。公司从早上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);                                                                                                        
}

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

两者都会给系统时间。

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

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