c语言之strftime与strptime

 

strptime函数windows平台上实现

注意:Windows平台无striptime,所以,想要使用strptime,需要如下的代码:

#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
 
#define TM_YEAR_BASE 1900
 
/*
 * We do not implement alternate representations. However, we always
 * check whether a given modifier is allowed for a certain conversion.
 */
#define ALT_E     0x01
#define ALT_O     0x02
#define LEGAL_ALT(x)    { if (alt_format & ~(x)) return (0); }


static  int conv_num(const char **, int *, int, int);


static int conv_num(const char **buf, int *dest, int llim, int ulim)
{
  int result = 0;
 
  /* The limit also determines the number of valid digits. */
  int rulim = ulim;
 
  if (**buf < '0' || **buf > '9')
    return (0);
 
  do {
    result *= 10;
    result += *(*buf)++ - '0';
    rulim /= 10;
  } while ((result * 10 <= ulim) && rulim && **buf >= '0' && **buf <= '9');
 
  if (result < llim || result > ulim)
    return (0);
 
  *dest = result;
  return (1);
}

 
static const char *day[7] = {
  "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
  "Friday", "Saturday"
};
static const char *abday[7] = {
  "Sun","Mon","Tue","Wed","Thu","Fri","Sat"
};
static const char *mon[12] = {
  "January", "February", "March", "April", "May", "June", "July",
  "August", "September", "October", "November", "December"
};
static const char *abmon[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
static const char *am_pm[2] = {
  "AM", "PM"
};

char * strptime(const char *buf, const char *fmt, struct tm *tm)
{
  char c;
  const char *bp;
  size_t len = 0;
  int alt_format, i, split_year = 0;
 
  bp = buf;
 
  while ((c = *fmt) != '\0') {
    /* Clear `alternate' modifier prior to new conversion. */
    alt_format = 0;
 
    /* Eat up white-space. */
    if (isspace(c)) {
      while (isspace(*bp))
        bp++;
 
      fmt++;
      continue;
    }
        
    if ((c = *fmt++) != '%')
      goto literal;
 
 
again:    switch (c = *fmt++) {
    case '%': /* "%%" is converted to "%". */
literal:
      if (c != *bp++)
        return (0);
      break;
 
    /*
     * "Alternative" modifiers. Just set the appropriate flag
     * and start over again.
     */
    case 'E': /* "%E?" alternative conversion modifier. */
      LEGAL_ALT(0);
      alt_format |= ALT_E;
      goto again;
 
    case 'O': /* "%O?" alternative conversion modifier. */
      LEGAL_ALT(0);
      alt_format |= ALT_O;
      goto again;
      
    /*
     * "Complex" conversion rules, implemented through recursion.
     */
    case 'c': /* Date and time, using the locale's format. */
      LEGAL_ALT(ALT_E);
      if (!(bp = strptime(bp, "%x %X", tm)))
        return (0);
      break;
 
    case 'D': /* The date as "%m/%d/%y". */
      LEGAL_ALT(0);
      if (!(bp = strptime(bp, "%m/%d/%y", tm)))
        return (0);
      break;
 
    case 'R': /* The time as "%H:%M". */
      LEGAL_ALT(0);
      if (!(bp = strptime(bp, "%H:%M", tm)))
        return (0);
      break;
 
    case 'r': /* The time in 12-hour clock representation. */
      LEGAL_ALT(0);
      if (!(bp = strptime(bp, "%I:%M:%S %p", tm)))
        return (0);
      break;
 
    case 'T': /* The time as "%H:%M:%S". */
      LEGAL_ALT(0);
      if (!(bp = strptime(bp, "%H:%M:%S", tm)))
        return (0);
      break;
 
    case 'X': /* The time, using the locale's format. */
      LEGAL_ALT(ALT_E);
      if (!(bp = strptime(b
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
strftime()和strptime()是Python中用于处理日期和时间的函数。 strftime()函数用于将日期和时间格式化为字符串。它接受一个格式字符串作为参数,并返回一个按照指定格式表示日期和时间的字符串。例如,使用datetime.now().strftime('%Y-%m-%d %H:%M:%S')可以获取当前时间,并按照年月日时分秒的格式输出。\[1\] strptime()函数用于将字符串解析为日期和时间对象。它接受两个参数,第一个参数是要解析的字符串,第二个参数是字符串的格式。它返回一个表示解析后的日期和时间的datetime对象。例如,使用datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")可以将字符串解析为datetime对象,并输出为2006-11-21 16:30:00。\[2\] 所以,strftime()函数用于将日期和时间格式化为字符串,而strptime()函数用于将字符串解析为日期和时间对象。它们在功能上是相反的。 #### 引用[.reference_title] - *1* *3* [Python知识笔记(+2):理解datetime模块中strftime()和strptime()、binascii模块中进制之间互相转换](https://blog.csdn.net/A33280000f/article/details/121069484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【Python】Python中的时间函数strftimestrptime对比](https://blog.csdn.net/fengdu78/article/details/118561388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值