我需要能够准确地找到python中两个日期之间的月份.我有一个解决方案,但它不是很好(如优雅)或快速.
dateRange = [datetime.strptime(dateRanges[0], "%Y-%m-%d"), datetime.strptime(dateRanges[1], "%Y-%m-%d")]
months = []
tmpTime = dateRange[0]
oneWeek = timedelta(weeks=1)
tmpTime = tmpTime.replace(day=1)
dateRange[0] = tmpTime
dateRange[1] = dateRange[1].replace(day=1)
lastMonth = tmpTime.month
months.append(tmpTime)
while tmpTime < dateRange[1]:
if lastMonth != 12:
while tmpTime.month <= lastMonth:
tmpTime += oneWeek
tmpTime = tmpTime.replace(day=1)
months.append(tmpTime)
lastMonth = tmpTime.month
else:
while tmpTime.month >= lastMonth:
tmpTime += oneWeek
tmpTime = tmpTime.replace(day=1)
months.append(tmpTime)
lastMonth = tmpTime.month
Run Code Online (Sandbox Code Playgroud)
所以只是为了解释一下,我在这里做的是将两个日期转换为iso格式转换为python datetime对象.然后我循环通过在开始日期时间对象中添加一周,并检查月份的数值是否更大(除非月份是12月,然后检查日期是否更少),如果值更大,我将其附加到列表几个月,并一直循环,直到我到达我的结束日期.
它完美地工作它似乎不是一个好方法...
假设我有一个标准的Post.first.created_at
日期时间.我可以2009-06-03 16:57:45.608000 -04:00
通过执行以下操作直接将其与格式中的日期时间进行比较:
Post.first.created_at > Time.parse("2009-06-03 16:57:45.608000 -04:00")
Run Code Online (Sandbox Code Playgroud)
编辑:两个字段都是日期时间,而不是日期.
我试图获得两个日期时间之间的差异,并将其作为一个返回datetime
.我找到了使用的例子,diff
但我似乎无法做到正确.
$timein = date("Y-m-d H:i:s");
$timeout = date("Y-m-d 20:00:00");
$totaltime = $timein->diff($timeout);
Run Code Online (Sandbox Code Playgroud)
但是$totaltime
记录0000-00-00 00:00:00
到我的DB.这是因为我没有格式化我的全时变量吗?
我意识到我可以用一个小的C或Ruby程序来做这个,但我希望我的脚本尽可能少的依赖.
鉴于这一点,如何在OS X上的bash脚本中进行日期数学计算?我见过一个帖子(在另一个网站上)有人做了以下事情:
date -d "-1 day"
但这似乎不适用于OS X.
附录:
有几个人评论并回应说Ruby,Python,Perl等是OS X的标准配置.我熟悉这三种语言,并且可以轻松编写一个可以满足我想要的脚本.事实上,我已经有了用Ruby编写的脚本.
所以也许我应该澄清"外部依赖"的含义.我的意思是,我不希望我的bash脚本必须调用其外部的任何其他脚本.换句话说,我希望它使用OS X的vanilla安装中可用的一些实用程序,并且已经在路径上.
但是,它看起来不可能,所以我将不得不使用我的外部依赖:Ruby脚本.
我已经尝试使用date_diff和date_create来获得已经转换为字符串的两个日期的差异.
这是代码:
$date_1 = date_create();
$date_now = date_format($date_1, 'Y-m-d');
//echo $date_now . "\n";
$date=date_create($date_now);
date_add($date,date_interval_create_from_date_string("3 days"));
$date_return = date_format($date,"Y-m-d");
$diff = date_diff(date_create($date_now), date_create($date_return));
echo $diff;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Object of class DateInterval could not be converted to string
Run Code Online (Sandbox Code Playgroud) 我需要两个或一个(out)C#方法,它将占用任何日期时间并返回该年份的年份开始日期和结束日期.
Ruby的日期/时间助手很有用但我发现了一个差异.似乎12个月不等于1年.检查1.月,你会发现它等于30.days,当然,12*30.days = 360.days,比实际年份的长度短5.25天.
当我根据客户指定的授权月数设置访问我们网站的某些组件时,我遇到了这种情况.我发现在运行我的测试时,一个36个月的术语提前几周到期了.解决方案是这样的:
def months_to_seconds(number_of_months)
( (number_of_months.to_f / 12) * 1.year).to_i.seconds
end
Run Code Online (Sandbox Code Playgroud)
这将返回number_of_months表示的一年中任何部分的秒数.
由于1年是等于几秒到365.25天,为什么你认为他们没有1.month返回一年的1/12而不是30天的秒?
以前有人碰过这个吗?有没有人有更好的解决方案?
我是php的新手.我想知道php中的一些日期操作事项.
// Get Current date
$date = date("Y-m-d");
Run Code Online (Sandbox Code Playgroud)
如果我想减去当前日期和特定日期怎么办,让我们说"今天 - 2008-06-26"?
如何在PHP中进行日期数学操作(添加,减号,多重等)?
如果今天,订阅者今天订阅2009-06-26,1周后我想从我的数据库中删除他的帐户,我该怎么做?(我使用的是mysql)
如果我们将用户的日期存储在我们的数据库中,我们该怎么办?例如,我们可以存储用户的bday日期,所以在他的bday日,我们给他发了一些电子邮件.还有什么可以约会?
我正在我的项目中使用Boost的日期时间库.当我发现它有持续时间类型的小时,天,月,年等时,我感到非常高兴,并且它们会根据您添加它们的内容来更改它们的值(即,在月份的一部分中添加1个月的预付款) ,它不只是添加30天或某些).我认为这个属性适用于日期类型,但我决定在我投入生产之前测试它...
local_date_time t1(date(2010, 3, 14), hours(1), easternTime, false); // 1am on DST transition date
{
CPPUNIT_ASSERT_EQUAL(greg_year(2010), t1.local_time().date().year());
CPPUNIT_ASSERT_EQUAL(greg_month(3), t1.local_time().date().month());
CPPUNIT_ASSERT_EQUAL(greg_day(14), t1.local_time().date().day());
CPPUNIT_ASSERT_EQUAL(1L, t1.local_time().time_of_day().hours());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().minutes());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().seconds());
}
t1 += days(1); // the time in EST should now be 1am on the 15th
{
CPPUNIT_ASSERT_EQUAL(greg_year(2010), t1.local_time().date().year());
CPPUNIT_ASSERT_EQUAL(greg_month(3), t1.local_time().date().month());
CPPUNIT_ASSERT_EQUAL(greg_day(15), t1.local_time().date().day());
CPPUNIT_ASSERT_EQUAL(1L, t1.local_time().time_of_day().hours()); // fails, returns 2
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().minutes());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().seconds());
}
Run Code Online (Sandbox Code Playgroud)
上面你会看到我的CPPUNIT单元测试.它在指示的2行失败,如果days()仅仅增加了24小时而不是1个逻辑日(因为DST转换导致2010-03-14在EST中长达23个小时),这就是我所期望的.
难道我做错了什么?这是一个错误吗?在这种数学方面,我是否完全误解了图书馆的设计目标?
仅当服务器副本比本地副本新时,从服务器下载新文件的标准pythonic方法是什么?
我的python-search-fu今天非常薄弱,或者确实需要滚动自己的日期时间解析器和比较器,如下所示。真的没有requests.header.get_datetime_object('last-modified')
吗?还是request.save_to_file(url, outfile, maintain_datetime=True)
?
import requests
import datetime
r = requests.head(url)
url_time = r.headers['last-modified']
file_time = datetime.datetime.fromtimestamp(os.path.getmtime(dstFile))
print url_time #emits 'Sat, 28 Mar 2015 08:05:42 GMT' on my machine
print file_time #emits '2015-03-27 21:53:28.175072'
if time_is_older(url_time, file_time):
print 'url modtime is not newer than local file, skipping download'
return
else:
do_download(url)
os.utime(dstFile, url_time) # maintain server's file timestamp
def time_is_older(str_time, time_object):
''' Parse str_time and see if is older than time_object.
This is a fragile function, …
Run Code Online (Sandbox Code Playgroud)