Python 去掉日期的前导0

一、新办法实现

  今天发现使用Python获取日期的时候,使用date.strftime('%Y.%M.%D.%H%I ')来格式化获取的日期如果月份小于10,会出现前导0.获取的日期格式如:2017.03.24.0510 所以会在月份3前面多一个0,但是此时我们并不想要这个0,所以百度了一下,发现都是使用%-D,但是在pycharm中运行的时候直接崩了,所以只能另寻他路,发现中有一个方法“date.timetuple():返回日期对应的time.struct_time对象;”此方法返回一个结构体,如下:

    time.struct_time(tm_year=2017, tm_mon=3, tm_mday=24, tm_hour=19, tm_min=37, tm_sec=3, tm_wday=4, tm_yday=83, tm_isdst=-1),

此结构体中的数字不含其前导0,所以可以使用其结构体来进行拼接。so。代码如下:

    time = datetime.datetime.now().timetuple()
    VersionInfo = str(time.tm_year) + '.' + str(time.tm_mon) + '.' + str(time.tm_mday) + '.' + str(time.tm_hour) + str(time.tm_min)

    datetime.datetime.now().timetuple()返回一个结构体,通过此结构体的方法tm_XXX即可获取对应的数据,只需要使用其进行拼接即可。
  获取的VersionInfo的值为:'2017.3.24.1937',此正是我想要的结果。哈哈,大功告成。

二、小时和分钟继续优化

  突然一想,发现后面小时和分钟中间没有‘.’,如果时间是是晚上0点,那么hour就是0,那么就会在最后一个出现XXXX.X.X.0XX,此时又出现了前导0,那么就又想办法去掉此时的前导0.

C语言中有三元运算符variable = exper ? b : c;即:如果exper表达式的值为true则variable = b,否则,variable = c,但是Python中却没有,不过厉害的网友却能够找到替代办法。使用表达式求值的短路效应来实现,所以稍加改造,在添加小时的时候判断如果是0,则拼接一个空'',这样拼接出来即可,

所以小时判断:

  str = (time.tm_hour != 0 and (str(time.tm_hour)) or (('')))
如果小时为0,则执行后面空字符串,否则执行(time.tm_hour)所以对上面拼接进行稍加改造:
    time = datetime.datetime.now().timetuple()
    VersionInfo = str(time.tm_year) + '.' + str(time.tm_mon) + '.' + str(time.tm_mday) + '.' +(time.tm_hour != 0 and (str(time.tm_hour)) or ((''))) + str(time.tm_min)

 

ps:
1、python中 ? : 三元表达式的使用介绍: http://www.educity.cn/develop/667587.html

2、Python零碎知识(10):对日期时间的处理 : http://www.cnblogs.com/BeginMan/archive/2013/04/08/3007403.html

posted on 2017-03-24 19:46  965452300  阅读(7012)  评论(1编辑  收藏  举报