使用下面的Joda Time的模式语法,这个输入字符串:
Sunday, January 09, 2011 6:15:00 PM
Run Code Online (Sandbox Code Playgroud)
变成这个日期时间:
2011-01-09T06:15:00.000Z
Run Code Online (Sandbox Code Playgroud)
码:
String start = "Sunday, January 09, 2011 6:15:00 PM";
DateTimeFormatter parser1 =
DateTimeFormat.forPattern("EEEE, MMMM dd, yyyy H:mm:ss aa");
DateTime startTime = parser1.parseDateTime(start);
Run Code Online (Sandbox Code Playgroud)
这种格式模式不正确吗?如果不是,有什么T
和Z
日期时间输出里面在做什么?
2011-01-09T06:15:00.000Z
Run Code Online (Sandbox Code Playgroud) 我需要计算两个日期之间的月份差异.
start = new Date(112, 4, 30) // Wed May 30 00:00:00 CEST 2012
end = new Date(111, 9, 11) // Tue Oct 11 00:00:00 CEST 2011
assert 8 == monthsBetween(start, end)
Run Code Online (Sandbox Code Playgroud)
使用Joda-Time,通过以下方式实现这一目标非常容易:
months = Months.monthsBetween(start, end).getMonths()
Run Code Online (Sandbox Code Playgroud)
如何在不使用其他库的情况下以Groovy方式实现此目的?
请考虑以下代码:
public static void main(String[] args) {
String pattern = "MMM dd, yyyy HH:mm:ss a z";
// joda-time
DateTime dt = DateTime.now();
System.out.println(dt.toString(pattern));
// java.time
ZonedDateTime ldt = ZonedDateTime.now();
System.out.println(ldt.toString(pattern)); // doesn't exist
System.out.println(ldt.format(DateTimeFormatter.ofPattern(pattern)));
}
Run Code Online (Sandbox Code Playgroud)
joda-time类(DateTime
,LocalDate
等)包含一个toString
接受所需格式的String的方法.这是一种非常方便的方法.然而,java-8实现省略了这种方法.相反,你需要打电话format(DateTimeFormatter formatter)
.
一个小抱怨,当然.但我的问题是:是否有任何原因从java.time中省略了这个?将我的应用程序从joda-time转换为java.time将会因为这个小小的遗漏而变得更加困难.但是,如果有合理的原因,我很乐意.并不是说你在这里缓和我的担忧,但我想我会问以防万一.
编辑:对于选民来说,这不是一个基于意见的问题.任何熟悉joda-time/java.time内部工作的人以及他们以某种方式发展的动机都有资格回答这个问题,即使他们从未这样做过.
为什么我写的这个测试在jodatime 1.6.2中失败了?这是一个错误吗?
@Test
public void testIfJodaTimePeriodsHandlesPeriodTypesOtherThanMinutesAndHours() {
long twentyDaysInMillis = TimeUnit.MILLISECONDS.convert(20, TimeUnit.DAYS);
Period twoWeeks = new Period(twentyDaysInMillis, PeriodType.weeks());
Assert.assertEquals(2, twoWeeks.getWeeks());
// twoWeeks.getWeeks() actually returns 0!!
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,具有所有PeriodTypes的期间仅填写分钟和小时的字段,即使传递给构造函数的millis超过25小时.这是违反直觉的.
如果这是一个愚蠢的问题我很抱歉,但我找不到任何有关此问题的信息.
我想在我的应用程序视图中使用JSP标记(而不是播放'标记') - 特别是用于格式化的Joda Time JSP标记.
我无法弄清楚如何调用这些标签 - 在JSP中我只需要导入taglib然后关闭.
<%@taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %>
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了一些简单的内容 - 如何在Play视图定义中执行此操作?目前我的taglib调用呈现为HTML.我知道Play的视图内容是基于Groovy的 - 我也试过在那里找到相关信息但是没有成功.
谢谢.
编辑对于它的价值,我开始怀疑我在这里误解了这种情况 - 我是否认为Play模板引擎与JSP 无关并且是一种替代而不是扩展?
import java.time.LocalDate;
import java.time.Period;
public class DateDiff {
public static void main(String[] args) {
/** The date at the end of the last century */
LocalDate endofCentury = LocalDate.of(2000, 12, 31);
LocalDate now = LocalDate.now();
Period diff = Period.between(endofCentury, now);
System.out.printf("The 21st century (up to %s) is %s old%n", now, diff);
System.out.printf("The 21st century is %d years, %d months and %d days old",
diff.getYears(), diff.getMonths(), diff.getDays());
}
}
Run Code Online (Sandbox Code Playgroud)
没有找到本地日期我错过了一个import指令