我想用Java做简单的日期计算.例如,计算日期之间的天数差异(具有0时间分量).当然你可以做一个简单的毫秒减法,除以每天的毫秒数,这可以正常工作 - 直到夏令时进入场景.我意识到,对于"天差"的不同解释是可能的,特别是,是否应该考虑时间成分.为简单起见,我们假设我们有一个0时间组件.
这种计算似乎是一个非常普遍的需求,我觉得讨论这个问题的不同方法很好.
我有一个NSDate和一个持续时间.我需要在持续时间之后得到时间
鉴于:
日期为"2010-02-24 12:30:00 -1000",
持续时间为3600秒
我需要得到"2010-02-24 13:30:00 -1000"
我想dateWithTimeIntervalSinceReferenceDate:,会做的伎俩,但我现在看到这给出了2001年1月1日GMT的日期偏移.
我需要使用另一个C函数吗?
我需要这样的功能Oracle.
当我给参数一个简单的日期.然后功能应该让我上个月的最后一天.
例:
FunctionName(10.02.2011) Result should be 31.01.2011
FunctionName(21.03.2011) Result should be 28.02.2011
FunctionName(31.07.2011) Result should be 30.06.2011 (Even date is last day of month)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?顺便说一句,我从不使用Oracle.
我一直在考虑一个日期,我正在采取像输入(日,月,年): 12, 03, 87.
现在我需要找出n几天之后的日期.
我已为此编写代码,但效率不高.能不能告诉我任何好的逻辑,它运行得更快,复杂性更低.
#include <stdio.h>
static int days_in_month[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int day, month, year;
unsigned short day_counter;
int is_leap(int y) {
return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);
}
next_day()
{
day += 1; day_counter++;
if (day > days_in_month[month]) {
day = 1;
month += 1;
if (month > …Run Code Online (Sandbox Code Playgroud) 我试图计算自给定日期以来几周内的距离而没有跳过篮球.我更喜欢用纯Ruby做,但ActiveSupport肯定是一个可以接受的选择.
我写了以下内容,这似乎有效,但看起来对我来说还有很长的路要走.
require 'date'
DAYS_IN_WEEK = 7.0
def weeks_since date_string
date = Date.parse date_string
days = Date.today - date
weeks = days / DAYS_IN_WEEK
weeks.round 2
end
weeks_since '2015-06-15'
#=> 32.57
Run Code Online (Sandbox Code Playgroud)
ActiveSupport的#weeks_since需要花费数周作为参数,因此它不适合这个用例.Ruby的Date类似乎也没有任何相关性.
是否有更好的内置解决方案或众所周知的算法来计算分隔一对日期的周数?我不打算对此进行编码 - 因为可读性胜过简洁,而只是为了了解Ruby本身是否支持我手工编码的日期算术类型.
如何确定Windows批处理文件中的(ISO 8601)周数?
不幸的是WMIC PATH WIN32_LOCALTIME GET /FORMAT:LIST只有WeekInMonth ...
我有一个记录跨越多年的数据框:
WarName | StartDate | EndDate
---------------------------------------------
'fakewar1' 01-01-1990 02-02-1995
'examplewar' 05-01-1990 03-07-1998
(...)
'examplewar2' 05-07-1999 06-09-2002
Run Code Online (Sandbox Code Playgroud)
我正在尝试将此数据框转换为每年总战争的摘要概述,例如:
Year | Number_of_wars
----------------------------
1989 0
1990 2
1991 2
1992 3
1994 2
Run Code Online (Sandbox Code Playgroud)
通常我会使用某种方式df.groupby('year').count()来获得按年计算的总战争,但由于我目前正在使用范围而不是设定日期,因此这种做法无效.
我目前正在编写一个生成年份列表的函数,然后列表中的每一年检查数据框中的每一行并运行一个函数来检查年份是否在该行的日期范围内(如果该行返回True)是这样的).
years = range(1816, 2006)
year_dict = {}
for year in years:
for index, row in df.iterrows():
range = year_in_range(year, row)
if range = True:
year_dict[year] = year_dict.get(year, 0) + 1
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎也非常复杂.所以我想知道,我错过了什么?解决这个问题的规范"熊猫方式"是什么?
要提取给定年份的一周,我们可以使用:
SELECT EXTRACT(WEEK FROM timestamp '2014-02-16 20:38:40');
Run Code Online (Sandbox Code Playgroud)
但是,我试图以一种奇怪的格式将几周组合在一起。我一周的开始将在周一凌晨 4 点开始,并在下周一凌晨 3:59:59 结束。
理想情况下,我想创建一个提供开始和结束日期的查询,然后按上面列出的周数对该期间的总销售额进行分组。
例子:
SELECT
(some custom week date),
SUM(sales)
FROM salesTable
WHERE
startDate BETWEEN 'DATE 1' AND 'DATE 2'
Run Code Online (Sandbox Code Playgroud)
我不打算更改EXTRACT()函数,而是创建一个查询,该查询将从以下示例表中提取并输出示例结果。
如果查询中的“DATE 1”是“2014-07-01”并且“DATE 2”是“2014-08-18”:
示例表:
itemID | timeSold | price
------------------------------------
1 | 2014-08-13 09:13:00 | 12.45
2 | 2014-08-15 12:33:00 | 20.00
3 | 2014-08-05 18:33:00 | 10.00
4 | 2014-07-31 04:00:00 | 30.00
Run Code Online (Sandbox Code Playgroud)
想要的结果:
weekBegin | priceTotal
----------------------------------
2014-07-28 04:00:00 | 30.00
2014-08-04 04:00:00 | 10.00 …Run Code Online (Sandbox Code Playgroud) 我有一个具有多个日期范围的数据框(准确地说是 45):
Range Start End
1 2014-01-01 2014-02-30
2 2015-01-10 2015-03-30
3 2016-04-20 2016-10-12
... ... ...
Run Code Online (Sandbox Code Playgroud)
他们永远不会重叠
我还有一个包含各种事件日期(200K+)的数据框:
Event Date
1 2014-01-02
2 2014-03-20
3 2015-04-01
4 2016-08-18
... ...
Run Code Online (Sandbox Code Playgroud)
我想测试这些日期是否在以下任何范围内:
Event Date InRange
1 2014-01-02 TRUE
2 2014-03-20 FALSE
3 2015-04-01 FALSE
4 2016-08-18 TRUE
...
Run Code Online (Sandbox Code Playgroud)
执行此测试的最佳方法是什么?我查看了 lubridate 的between和interval函数以及各种 Stackoverflow 问题,但找不到好的解决方案。
我正在使用逻辑暴露来计算鸟巢的孵化成功率。我的数据集非常广泛,我有大约 2,000 个巢穴,每个巢穴都有一个唯一的 ID(“ClutchID”)。我需要计算给定巢穴暴露的天数(“暴露”),或者更简单地说,是第一天也是最后一天。我使用了以下代码:
HS_Hatch$Exposure=NA
for(i in 2:nrow(HS_Hatch)){HS_Hatch$Exposure[i]=HS_Hatch$DateVisit[i]- HS_Hatch$DateVisit[i-1]}
Run Code Online (Sandbox Code Playgroud)
其中 HS_Hatch 是我的数据集,DateVisit 是实际日期。唯一的问题是 R 正在计算第一个日期的曝光值(这没有意义)。
我真正需要的是计算给定离合器的第一个日期和最后一个日期之间的差异。我还研究了以下内容:
Exposure=ddply(HS_Hatch, "ClutchID", summarize,
orderfrequency = as.numeric(diff.Date(DateVisit)))
df %>%
mutate(Exposure = as.Date(HS_Hatch$DateVisit, "%Y-%m-%d")) %>%
group_by(ClutchID) %>%
arrange(Exposure) %>%
mutate(lag=lag(DateVisit), difference=DateVisit-lag)
Run Code Online (Sandbox Code Playgroud)
我仍在学习 R,所以任何帮助将不胜感激。
编辑:以下是我正在使用的数据示例
HS_Hatch <- structure(list(ClutchID = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L
), DateVisit = c("3/15/2012", "3/18/2012", "3/20/2012", "4/1/2012",
"4/3/2012", "3/18/2012", "3/20/2012", "3/22/2012", "4/3/2012",
"4/4/2012", …Run Code Online (Sandbox Code Playgroud) date-arithmetic ×10
date ×4
r ×2
batch-file ×1
c ×1
c++ ×1
cmd ×1
cocoa ×1
cocoa-touch ×1
database ×1
function ×1
intervals ×1
java ×1
nsdate ×1
objective-c ×1
oracle ×1
pandas ×1
postgresql ×1
python ×1
ruby ×1
sql ×1
summarize ×1
timestamp ×1
week-number ×1