【问题标题】:Python select random date in current yearPython选择当年的随机日期
【发布时间】:2011-06-13 03:40:45
【问题描述】:

在 Python 中,您可以从一年中选择一个随机日期。例如如果年份是 2010 年,则返回的日期可能是 15/06/2010

【问题讨论】:

    标签: python python-datetime


    【解决方案1】:

    这是一个老问题,但是,你可以使用我的新库^_^ chancepy here

    from chancepy import Chance
    
    randomDate = Chance.date(year=2020)
    

    【讨论】:

      【解决方案2】:
      import calendar
      import datetime
      import random
      
      def generate_random_date(future=True, years=1):
          today = datetime.date.today()
      
          #Set the default dates
          day    = today.day
          year   = today.year
          month  = today.month
      
          if future:
              year  = random.randint(year, year + years)
              month = random.randint(month, 12)
      
              date_range = calendar.monthrange(year, month)[1] #dates possible this month
              day   = random.randint(day + 1, date_range) #1 day in the future
          else:
              year  = random.randint(year, year - years)
              month = random.randint(1, month)
              day   = random.randint(1, day - 1)
      
          return datetime.date(year, month, day)
      

      【讨论】:

        【解决方案3】:
        import datetime, time
        import random
        
        def year_start(year):
            return time.mktime(datetime.date(year, 1, 1).timetuple())
        
        def rand_day(year):
            stamp = random.randrange(year_start(year), year_start(year + 1))
            return datetime.date.fromtimestamp(stamp)
        

        编辑: Michael Dunns 回答中使用的序数日期比时间戳更好用!不过,人们可能希望将序数的使用与此结合起来。

        【讨论】:

          【解决方案4】:

          使用序号日期要简单得多(根据今天的日期是 734158):

          from datetime import date
          import random
          
          start_date = date.today().replace(day=1, month=1).toordinal()
          end_date = date.today().toordinal()
          random_day = date.fromordinal(random.randint(start_date, end_date))
          

          这对于 1AD 之前的日期将失败。

          【讨论】:

          • +1 非常整洁!我不知道序数日期之前是什么 :-) 显然比我的 timstamp 解决方案更好更漂亮,它对“之前的日期”有更大的限制......
          • 问题是“一年中的随机日期”,而不是从 1 月 1 日到今天。
          • 但标题是“选择当年的随机日期”。要获得任意年份的随机日期,您只需计算不同的开始日期和结束日期,例如:start_date = date(day=1, month=1, year=MY_YEAR).toordinal() 和 end_date = date(day=31, month=12, year=MY_YEAR).toordinal() 。
          【解决方案5】:

          不是直接的,但您可以将随机天数添加到 1 月 1 日。我想以下应该适用于公历:

          from datetime import date, timedelta
          import random
          import calendar
          
          # Assuming you want a random day of the current year
          firstJan = date.today().replace(day=1, month=1) 
          
          randomDay = firstJan + timedelta(days = random.randint(0, 365 if calendar.isleap(firstJan.year) else 364))
          

          【讨论】:

          • 不错。在calendar 模块中实际上有一个isleap() 函数,这样就不用自己定义了。
          • @Daniel:谢谢,你是对的。每天都在 SO 上学习新东西 :) 还没有经常使用日历模块(还)。编辑了我的答案。
          猜你喜欢
          • 2017-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-21
          • 1970-01-01
          • 2015-11-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多