DateTime类的parse方法中格式化程序的样式是否必须与字符串的确切样式匹配?例如,我从数据库(Oracle)获取TimeStamp对象并将其转换为字符串.在数据库中,TimeStamp就像这样存储
08-AUG-12 12.00.00.000000000 AM
我将格式化程序设置为此样式
String pattern = "dd-MMM-yy";
Run Code Online (Sandbox Code Playgroud)
我得到了这个例外
java.lang.IllegalArgumentException: Invalid format: "08-AUG-12 12.00.00 AM" is malformed at " 12.00.00 AM"
org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:866)
org.joda.time.DateTime.parse(DateTime.java:144)
Run Code Online (Sandbox Code Playgroud)
这究竟是什么意思,我将如何解决它?当我设置我的格式化程序时, "yy-MMM-dd hh.mm.ss aa"我没有得到异常,但它在浏览器中打印如下: 2008-08-12T00:00:00.000-04:00,但我需要将其打印为"dd-MMM-yy hh:mm:ss aa"
我目前正在java项目中测试一些webapp技术,并且想知道为什么页面有时会加载很快,有时需要花费近5秒来加载.
我终于发现它就是这条线
LocalDateTime now = new LocalDateTime();
当它第一次被调用时,需要永远获得当前时间.在那之后调用时,即使是完全不同的地方,它也会非常快.
我正在使用
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>1.6.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
有没有人有类似的经历?真的卡在这里..我可以在我的应用程序的早些时候使用LocalDateTime来紧固后续调用 - 但这似乎相当沉闷.
编辑
我现在误用了Spring:
@Service
public class JodaTimeLoader {
public JodaTimeLoader() {
LocalDateTime loadMe = new LocalDateTime();
}
}
Run Code Online (Sandbox Code Playgroud) 它似乎并不直截了当.
我在尝试这个:
@Override
public int compare(Period o1, Period o2) {
return o1.toStandardDays().getDays() > o2.toStandardDays().getDays() ? -1 : (o1.toStandardDays().getDays() == o2.toStandardDays().getDays() ? 0 : 1);
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个例外:
java.lang.UnsupportedOperationException: Cannot convert to Days as this period contains months and months vary in length
at org.joda.time.Period.checkYearsAndMonths(Period.java:1455)
at org.joda.time.Period.toStandardDays(Period.java:1314)
我希望Peroid有一种isLongerThan(Period p)方法.
这个问题是关于反序列化到乔达时间 日期时间使用杰克逊的数据类型-乔达模块的杰克逊.是否有一个默认时区,日期字符串将被反序列化?如果是这样,它是什么?是UTC吗?
我需要问这个,因为杰克逊的文档并不是特定的Joda-Time DateTime.我在本文(http://wiki.fasterxml.com/JacksonFAQDateHandling)中发现,杰克逊将GMT作为反序列化为java.util.Date或的默认时区java.util.Calendar.但是,本文档中没有提及Joda-Time数据类型.另外,我特别需要字符串DateTime使用UTC时区反序列化为对象,而不是GMT:尽管这两个区域非常相似,但是存在一些小差异,因此GMT对我来说是不可行的.
谢谢.
oracle sql:
select trunc( sysdate, 'Month') month
from dual
Run Code Online (Sandbox Code Playgroud)
Java的:
java.sql.Date sqlDate = resultSet.getDate("month");
log.info(sqlDate);
DateTime dateTime = new DateTime(sqlDate.getTime());
log.info(dateTime);
dateTime = dateTime.withMillisOfDay(0);
log.info(dateTime);
Run Code Online (Sandbox Code Playgroud)
输出:
2012-01-01
2012-01-01T 01:00:00.000 + 07:00
2012-01-01T 00:00:00.000 + 07:00
额外的一小时在哪里?
我有一个ISO 8601日期,让我们说: 2012-01-19T19:00-05:00
我的机器时区是 GMT+1
我正在尝试使用joda来解析它并将其转换为相应的GMT日期和时间:
DateTimeFormatter simpleDateISOFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mmZZ");
creationDate = simpleDateISOFormat.withZone(DateTimeZone.UTC)
.parseDateTime(date + "T" + time)
.toDate();
Run Code Online (Sandbox Code Playgroud)
现在我期待的结果是 Fri Jan 20 00:00:00 CET 2012
相反,我得到: Fri Jan 20 01:00:00 CET 2012
我相信这是因为我在时区GMT + 1.
有没有办法解析日期伪装在不同的时区?
编辑:基本上问题是当我调用toDate()方法时.该方法根据需要将其转换DateTime为a Date,但我会在本地时间对其进行转换.
有人知道一种不会施加此限制的转换方法吗?
是否有可能从joda-time DateTimeFormatter获取模式字符串?
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd");
String originalPattern = formatter. ???
Run Code Online (Sandbox Code Playgroud) 我正在努力仔细并仔细地清理我的一些旧的(生产)代码.我要做的一件事就是将我的所有用法转换java.util.Date为LocalDate和DateTime.
但是,当我工作的时候,我注意到今晚有一个很大的障碍.我有这个代码:
ResultSet results = stmt.executeQuery();
Date last = results.getDate("LAST_DELIVERY_DATE");
Date next = results.getDate("NEXT_DELIVERY_DATE");
boolean received;
if (last == null && next == null) {
received = true; // order is not open
} else if (last == null) {
received = false;
} else {
received = true;
}
Run Code Online (Sandbox Code Playgroud)
我转换last和next到:
LocalDate last = new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));
Run Code Online (Sandbox Code Playgroud)
和Netbeans强调if == null并说:
Unnecessary test for null …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取一个字符串并以更易读的格式将其转换为另一个字符串:
String startTime = invite.get_start_time();
Log.d(LOG_TAG, "String to be converted is " + startTime);
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dt = fmt.parseDateTime(startTime);
invite.set_start_time(dt.toString("MM dd yyyy hh:mmaa"));
Run Code Online (Sandbox Code Playgroud)
08-02 14:33:19.011:D/InvitesObjectListAdapter(856):要转换的字符串是2015-08-03 10:30:00 08-02 14:33:19.041:W/System.err(856):java .io.IOException:找不到资源:"org/joda/time/tz/data/ZoneInfoMap"ClassLoader:dalvik.system.PathClassLoader [DexPathList [[zip file"/data/app/me.lunchbunch.core-1/base .apk"],nativeLibraryDirectories = [/ vendor/lib64,/ system/lib64]]]
有谁知道这个错误来自哪里?
有没有简单的方法将Java 8的LocalDateTime转换为Joda的LocalDateTime?
其中一种方法是将其转换为String,然后从该String创建Joda的LocalDateTime.