Python学习:时间与时间戳的相互转换

遇到问题

在牛客网上刷到这样一道题:编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
乍看到题目时,我首先想到之前在python100例中用到datetime模块的一个实例。不过翻出题目一看,才发现当时那个实例仅仅是按照格式输出,而此题的要求更高一些。


问题分析

  1. 输入年月日时分秒,首先这个输入是一个字符串格式,并且不全为数字,因此想到应该要用到正则。那么re这个模块必不可少了。
  2. 输出为该年月日时分秒的下一秒。要想实现这个下一秒,原理上只要给秒数加1就可以了。但是——我们总会遇到像题目示例所提到的那种59分59秒的尴尬,事实上,一旦牵扯到进位,就不再是简单的秒数加1了,因此,这里就想到将时间换为时间戳,对时间戳加上1秒,之后再转换回标准时间,按照规定格式输出即可。

具体方法

话不多说,代码贴上。
版本:python 2.7

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Name: demo19.py
# Author: zhuzhuzhu   time:2018/5/10
# Connect: [email protected]
# Desc: 编写一个函数,要求输入年与日时分秒,输出该年月日时分秒的下一秒。
import re
import time
# 创建一个类NextSecond()
class NextSecond():
    # 定义一个函数,实现将时间增加一秒的功能
    def next_second(self, str):
        # 匹配时间字符串中的所有数字,将其存为列表s_list
        s_list = re.findall('\d+', str)
        # 用于将序列中的元素以指定的字符连接生成一个新的字符串
        s = ''.join(s_list)
        # time.strptime()根据指定的格式把一个时间字符串解析为时间元组。
        strptime = time.strptime(s, "%Y%m%d%H%M%S")
        # time.mktime()函数会返回用秒数来表示时间的浮点数【时间戳】
        timestamp = time.mktime(strptime)
        # 秒数加一
        new_timestamp = timestamp + 1
        # 再用time,localtime()函数作用是格式化时间戳为本地的时间
        new_str = time.localtime(new_timestamp)
        # 函数接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
        dt = time.strftime("%Y-%m-%d %H:%M:%S", new_str)
        dt_list = re.findall("\d+", dt)
        return "%s%s%s%s%s%s秒" % (dt_list[0], dt_list[1], dt_list[2], dt_list[3], dt_list[4], dt_list[5])


if __name__ == '__main__':
    a = NextSecond()
    print a.next_second("2017年11月09日23时53分59秒")
    print a.next_second("2004年12月31日23时59分59秒")

猜你喜欢

转载自blog.csdn.net/in_nocence/article/details/80273144