日期格式为dd.mm.yyyy in C

时间:2013-05-26 17:10:27

标签: c date stdin

我想知道是否有办法以C格式dd.mm.yyyy从控制台读取日期。我有一个结构,其中包含日期信息。我尝试了另一种结构,只是为了日期,月份和年份:

typedef struct
{
    int day;
    int month;
    int year;
} Date;

但点是个问题。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

尝试:

  Date d;
  if (scanf("%d.%d.%d", &d.day, &d.month, &d.year) != 3)
    error();

答案 1 :(得分:1)

您可以使用strptime()将任意格式的日期字符串读入struct tm

#define _XOPEN_SOURCE /* glibc2 needs this to have strptime(). */
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <errno.h>

...

Date d = {0};
char * fmt = "%d.%m.%Y";
char s[32] = "";
char fmt_scanf[32] = "";
int n = 0;

sprintf(fmt_scanf, "%%%ds", sizeof(s) - 1); /* Created format string for scanf(). */

errno = 0;    
if (1 == (n = scanf(fmt_scanf, s)))
{
  struct tm t = {0};
  char * p = strptime(s, fmt, &t);
  if ((s + strlen(s)) != p)
  {
    fprintf(stderr, "invalid date: '%s'\n", s);
  }
  else
  {
    d.day = t.tm_mday;
    d.month = t.tm_mon + 1; /* tm_mon it zero-based. */
    d.year = t.tm_year + 1900; /* tm_year is years since 1900. */ 
  }
}
else
{
  perror("scanf()");
}

<强>更新

采取这种方式的积极副作用和额外收益是:

  • 无需输入验证,因为全部由strptime()完成。
  • 更改输入格式非常简单:只需让fmt指向不同的格式字符串。

答案 2 :(得分:0)

我们仅出于以下目的使用定义的函数:strftime()! (感谢tutorialpoints.com提供有关C标准库的详细信息)

它有什么作用?它允许我们使用所需的日期和/或时间创建字符串,无论如何我们都希望它们具有它们,如果需要,还可以使用其他字符需要!例如,如果我们想为今天的日志创建文件名,则可以创建一个“ 20191011.log”字符串。

这是所需的代码:

#include<stdio.h>//printf
#include<time.h>//localtime,time,strftime


/*Here, the log file's name will be created*/
int main()  
{
    char filename[13];
    //Obtaining time
    time_t raw;
    struct tm *obtained_time;

    time(&raw);
    obtained_time = localtime (&raw);


    //Obtaining string_format out of generated time
    int success_filename;

    success_filename = strftime(filename,sizeof(filename),"%Y%m%d.log",obtained_time);//yyyymmdd.log
    if (success_filename != 0)
    {
            printf("%s",filename);
    }
    obtained_time = NULL;

    return 0;
}

`

strftime的第三个参数是您可以编写字符串食谱的位置,并且有很多选项,例如天和月,时间,秒,小时,分钟,AM / PM指定的缩写或全名。等等。要进一步探索它们,请访问以下链接: Tutorialspoint on strftime() function

请告诉我它是否对您有帮助!