- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从sql获取时间戳,需要计算两个时间戳之间的差异。
//startDate = 2014-07-10 16:07:00.0
//endDate = 2014-07-11 04:07:00.0
//END_DATE = 2014-07-18 08:07:00.0
private Timestamp calculateWflTime(String vehicleNum, Timestamp startDate,
Timestamp endDate) {
Timestamp t1 = new Timestamp (END_DATE.getTime()); //2014-07-18 08:07:00.0
Timestamp t2 = new Timestamp (startDate.getTime()); //2014-07-10 16:07:00.0
Timestamp wflTime = null;
long diff=0;
if(VEH_NUM == vehicleNum){
diff = t1.getTime()-t2.getTime();//diff(END_DATE,startDate);
}
wflTime = new Timestamp( Math.abs(diff/(1000*60*60*24)));
return wflTime; //1970-01-01 05:30:00.007
}
最佳答案
表达式
new Timestamp( Math.abs(diff/(1000*60*60*24)));
从领域的角度来看,
在语义上是错误的。为什么?您尝试将一段时间(实际上是以毫秒为单位的持续时间,未固定在时间轴上)转换为此处固定的时间点,从 UNIX 纪元 (1970-01-01) 开始计数。这就像用几何术语将长度转换为点。
两个时间戳之间的差异不应该是新的时间戳,而只是持续时间(这里是您的差异变量以毫秒为单位)。这取决于您想要如何将其标准化为年和月。
清洁 Joda 解决方案:
public static void main(String... args) {
Timestamp t1 = new Timestamp(0);
Timestamp t2 = new Timestamp(86400000 + 7261000);
System.out.println(getDurationJoda(t1, t2));
// output: 1 day, 2 hours, 1 minute, 1 second.
}
public static String getDurationJoda(Timestamp start, Timestamp end) {
LocalDateTime ldtStart = new LocalDateTime(start);
LocalDateTime ldtEnd = new LocalDateTime(end);
Period p = new Period(ldtStart, ldtEnd, PeriodType.dayTime());
PeriodFormatter fmt =
new PeriodFormatterBuilder()
.appendDays().appendSuffix(" day, ", " days, ")
.appendHours().appendSuffix(" hour, ", " hours, ")
.appendMinutes().appendSuffix(" minute, ", " minutes, ")
.appendSeconds().appendSuffix(" second.", " seconds.").toFormatter();
return fmt.print(p);
}
Time4J 解决方案
此外,您可以使用我的库 Time4J 来替代此方案。其中包含一个可本地化的 PrettyTime
类,用于自版本 1.2 以来的持续时间格式化:
private static final IsoUnit DAYS = CalendarUnit.DAYS;
private static final IsoUnit HOURS = ClockUnit.HOURS;
private static final IsoUnit MINUTES = ClockUnit.MINUTES;
private static final IsoUnit SECONDS = ClockUnit.SECONDS;
public static void main(String... args) {
Timestamp t1 = new Timestamp(0);
Timestamp t2 = new Timestamp(86400000 + 7261000);
System.out.println(getDurationTime4J(t1, t2));
// output: 1 day, 2 hours, 1 minute, and 1 second
}
public static String getDurationTime4J(Timestamp start, Timestamp end) {
PlainTimestamp startTS = TemporalTypes.SQL_TIMESTAMP.transform(start);
PlainTimestamp endTS = TemporalTypes.SQL_TIMESTAMP.transform(end);
Duration<?> duration =
Duration.in(DAYS, HOURS, MINUTES, SECONDS).between(startTS, endTS);
return PrettyTime.of(Locale.ENGLISH).print(duration, TextWidth.WIDE);
}
最后但并非最不重要的一点是,在格式化持续时间之前尝试评估字符串条件,并使用 equals() 而不是 ==,例如:
if (VEH_NUM.equals(vehicleNum)) {
// call getDuration(..., ...)
} else {
// return zero duration string
}
关于java - 减去两个 java.sql.timestamp 给出错误的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25260478/
我有两个列表,我想从 neg 中减去列表 pos 中元素的频率。所以: neg = [x for x in all[:800000]] pos = [x for x in all[800000:]]
我有两个列表,我想从 neg 中减去列表 pos 中元素的频率。所以: neg = [x for x in all[:800000]] pos = [x for x in all[800000:]]
我正在尝试减去 2 个标准逻辑向量并得到错误 p2 <= p1(11 downto 0)- idata(11 downto 0); Error (10327): VHDL error at sub.v
我将以下代码嵌入到类中。每当我运行 distToPoint 时,它都会给出错误“不支持的操作数类型 -: 'NoneType' 和 'float'” 我不知道为什么它会返回 NoneType 和如何让
这一直让我想知道, 假设我有这种情况: select (...long sub query..) - (...long sub query..) 我想把 - 放在条件中,这意味着有时它会是 - 有时是
我有两个 vector 。我需要从 vector1 中删除 vector2 中的内容。 [编辑:不清楚这是否意味着按照下面的链接或设置差异进行逐元素减法] 我使用 Visual Studio 2010
我有一张这样的 table : id product_property_id product_id amount type 1 1 145 10
我有两个 boolean 值列表 buy_machine 和 broken_machine。我想创建第三个列表 working_machines,它是购买的机器数量的总和并减去坏机器的数量。 我尝试了
我似乎可以解决这个问题。我有两个来自 sql 的访问者/国家/地区列表 us,us,uk,fr,uk,uk,uk 和 us,uk 我用 array_count_values() 将它们制成数组: Ar
我在 javascript 中减去时间时遇到了麻烦,尽管我已经谷歌搜索了 2 天但没有任何运气:( 我正在尝试为调查问卷计时。当用户开始调查问卷时,会记录时间戳。当用户完成/单击提交时,会记录新的时间
我正在尝试对 flex 搜索中索引的字段进行一些分析。 其中两个字段是“start_time”和“end_time”。我基本上希望将这两个字段的差异分组,即('end_time'-'start_tim
我有一个函数,它接收两个 BigDecimal 数字,即 bd1 和 bd2 作为参数。该函数应减去 bd1 - db2 并返回 bd1 和 bd2 的小数位数均为 2,结果的小数位数也应仅为 2但使
根据ldt_code中的ld源代码here。没有将dl_main传递给phdr的上下文,我对为什么通过减去虚拟地址来推断main_map的加载地址有些困惑。 我跟踪过的代码: 1124 static
我进行了多次重复测量的治疗,我想减去每次治疗的每个时间点的对照值。数据集的形状是这样的,有多年、物种和处理。 ID Year Species Treatment value 1 2010 x
我正在尝试查找一次旅行的矩形区域,可以在此处找到更多上下文 我在下面的代码中遇到的错误是: "Exception in thread "main" java.lang.ArrayIndexOutOfB
我一直在尝试使用 pandas dataframe 减去我读入 python 的列之间的日期和时间。我写的代码如下: Time = df['t'] - df['t'].shift(1) + df['t
I want to subtract all values in a[nn,...,0] by b[nn] while keeping the original structure of the ar
假设我有两个列表:List l1,和 Listl2 请帮助我如何在 2 个列表之间合并、减去和相交。谢谢。 注意:我使用的是 .NET 2.0,所以我不能使用 LINQ。谢谢。 最佳答案 以下是伪代码
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我正在尝试运行以下代码: extern crate unicase; use unicase::UniCase; use std::collections::HashSet; fn main() {
我是一名优秀的程序员,十分优秀!