我知道有关于java.util.Date和Joda-Time的问题.但经过一番挖掘后,我找不到关于java.time API(Java 8中新增,JSR 310定义)和Joda-Time之间差异的线程.
我听说Java 8的java.time API比Joda-Time更清洁,可以做得更多.但我找不到比较两者的例子.
我只是想知道是否需要TimeSpan,java.util以便我可以定义这两次之间有多少小时,分钟和秒.
由此TimeSpan我们可以有两次之间的时间间隔.喜欢
TimeSpan getTimeSpan( Date before, Date after ){...}
Run Code Online (Sandbox Code Playgroud)
要么
long timeSpan = System.currentTimeMillis();
// ... long job
timeSpan = System.currentTimeMillis() - timeSpan;
TimeSpan ts = new TimeSpan(timeSpan);
Run Code Online (Sandbox Code Playgroud)
有了它,TimeSpan我们可以使用它SimpleDateFormat.
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
format.format( timsSpan );
Run Code Online (Sandbox Code Playgroud)
我不确定这是否已经在Java中实现,但我还没有发现.
我有点挣扎于此.
我想设置我的日历让我们说:2012年2月的第三个星期一. 我没有找到任何使用Java的方法.
例如,如果我想设置2011年圣诞节的日历,我可以通过这种方式轻松完成:
Calendar when = Calendar.getInstance();
when.set (Calendar.MONTH, Calendar.DECEMBER);
when.set (Calendar.DAY_OF_MONTH, 25)
when.set (Calendar.YEAR, 2011);
Run Code Online (Sandbox Code Playgroud)
但我很遗憾如何设置它让我们说2012年阵亡将士纪念日,即5月的最后一个星期一.这是我的代码,但这显然是错误的,因为我根本无法假设5月的最后一个星期一将在当年5月的第4周:
Calendar when = Calendar.getInstance ();
when.set (Calendar.DAY_OF_WEEK,Calendar.MONDAY);
when.set (Calendar.MONTH, Calendar.MAY);
when.set (Calendar.WEEK_OF_MONTH, 4)
when.set (Calendar.YEAR, 2012);
Run Code Online (Sandbox Code Playgroud)
关于我如何以编程方式找出的任何建议,在2012年5月的哪个星期(例如上面的例子)是最后一个星期一?假设我可以获得该信息,我应该能够使我的代码在上面工作.
我需要一些基本上适用于任何其他例子的东西.可以为相同场景提供确切日期的东西.例子:
哪个日期是:
- 2015年5月第3个星期四
- 2050年6月1日星期一
- 2012年12月4日星期二
- 2000年7月2日星期三
我真的需要这个用于我的项目,我确信这很简单,但是我在这个没有任何实际结果的情况下突破了我的头脑:)并且在网上也找不到任何东西.
添加:
好的,这是我一个月的最后一个星期一的地方:
when.set (GregorianCalendar.MONTH, GregorianCalendar.MAY);
when.set (GregorianCalendar.DAY_OF_WEEK, Calendar.MONDAY);
when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, -1);
when.set (Calendar.YEAR, 2012);
Run Code Online (Sandbox Code Playgroud)
但我不知道我会在同一个月的星期一如何做这样的事情,就像这样?
when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, 2);
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在尝试将包含日期(例如今天="08082013")的无格式字符串解析为格式"08.08.2013".
这有效:
(.parse (java.text.SimpleDateFormat. "ddMMyyyy") today) =><Date Sun Jan 01 00:00:00 CET 1950>
但是当我这样做时,(.parse (java.text.SimpleDateFormat. "dd.MM.yyyy") today)我得到了错误"Unparseable date: "08082013"
为什么?如何获得所需的日期格式?
我刚开始玩机智/小鸭子。它是用Clojure编写的,我以前没有Clojure的经验。我需要将2016-08-14T19:45:48.000 + 05:30这样的字符串解析为2016年8月14日(星期日)1945hrs之类的格式。我在Internet上搜索并遇到了lib clj-time。经过很长时间的努力后,我遇到了这个线程,并认为rfc822是我的杯茶。因此,我使用了格式化程序rfc822,但它给了我一个例外:
java.lang.IllegalArgumentException: Invalid format: "2016-08-16T00:00:00.000+05:30"
这是我的代码:
(ns firstproj.core
(:gen-class)
(:require [duckling.core :as p])
(:require [clj-time.format :as f]))
(defn -main
"I don't do a whole lot."
[x]
(p/load! { :languages ["en"]})
(def var_ (p/parse :en$core x [:time]))
(def date_string "2016-08-14T19:45:48.000+05:30")
(f/parse (f/formatters :rfc822) date_string))
Run Code Online (Sandbox Code Playgroud)
所以有人可以告诉我我在做什么错。或Clojure中的任何其他方式来获取我想要的日期时间格式。由于我对Clojure完全幼稚,因此请您详细回答,这将有助于我更好地理解这一点。谢谢。