我正在使用JodaTime 1.6.2.
我有一个LocalDate我需要转换为(Joda)LocalDateTime或java.sqlTimestampfor ormapping.
原因是我已经想出如何在a LocalDateTime和a 之间进行转换java.sql.Timestamp:
LocalDateTime ldt = new LocalDateTime();
DateTimeFormatter dtf = DateTimeFormatter.forPattern("yyyy-MM-dd HH:mm:ss");
Timestamp ts = Timestamp.valueOf(ldt.toString(dtf));
Run Code Online (Sandbox Code Playgroud)
所以,如果我可以相互转换LocalDate和LocalDateTime的话,我可以让继续转换java.sql.Timestamp.感谢任何正确方向的推动!
我需要得到org.joda.time.LocalDate一个月的第一个日期和最后一个日期.获得第一个是微不足道的,但是获得最后一个似乎需要一些逻辑,因为几个月有不同的长度,二月长度甚至变化多年.是否有一个已经内置于JodaTime的机制或者我应该自己实现它?
如何将字符串转换为LocalDate?
我见过的例子如下:
LocalDate dt = new LocalDate("2005-11-12");
Run Code Online (Sandbox Code Playgroud)
但我的字符串如下:
2005-nov-12
Run Code Online (Sandbox Code Playgroud) 我正在将Joda Time存储库添加到SBT中
libraryDependencies ++= Seq(
"joda-time" % "joda-time" % "2.1"
)
Run Code Online (Sandbox Code Playgroud)
然后我喜欢这样使用它:
val ymd = org.joda.time.format.DateTimeFormat.forPattern("yyyyMMdd")
ymd.parseDateTime("20121212")
Run Code Online (Sandbox Code Playgroud)
但是,当我在SBT编译项目时,我感到很讨厌:
[warn] Class org.joda.convert.FromString not found - continuing with a stub.
[warn] Caught: java.lang.NullPointerException while parsing annotations in /home/jack/.ivy2/cache/joda-time/joda-time/jars/joda-time-2.1.jar(org/joda/time/DateTime.class)
[error] error while loading DateTime, class file '/home/jack/.ivy2/cache/joda-time/joda-time/jars/joda-time-2.1.jar(org/joda/time/DateTime.class)' is broken
[error] (class java.lang.RuntimeException/bad constant pool tag 10 at byte 42)
Run Code Online (Sandbox Code Playgroud)
我尝试了joda-time的2.0版本,但是得到了同样的错误.
我需要找到两个日期之间的天数:一个来自报告,一个是当前日期.我的片段:
int age=calculateDifference(agingDate, today);
Run Code Online (Sandbox Code Playgroud)
这calculateDifference是一个私有方法,agingDate并且today是Date对象,仅供您澄清.我已经关注了Java论坛中的两篇文章,即Thread 1/Thread 2.
它在独立程序中运行良好,但是当我将其包含在我的逻辑中以从报告中读取时,我会得到一个不寻常的值差异.
为什么会发生这种情况?我该如何解决?
编辑:
与实际天数相比,我获得的天数更多.
public static int calculateDifference(Date a, Date b)
{
int tempDifference = 0;
int difference = 0;
Calendar earlier = Calendar.getInstance();
Calendar later = Calendar.getInstance();
if (a.compareTo(b) < 0)
{
earlier.setTime(a);
later.setTime(b);
}
else
{
earlier.setTime(b);
later.setTime(a);
}
while (earlier.get(Calendar.YEAR) != later.get(Calendar.YEAR))
{
tempDifference = 365 * (later.get(Calendar.YEAR) - earlier.get(Calendar.YEAR));
difference += tempDifference;
earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
} …Run Code Online (Sandbox Code Playgroud) 我有约会Wed May 08 00:00:00 GMT+06:30 2013.我使用像这样的Joda-Time DateTime添加一天.
DateTime dateTime = new DateTime(date);
dateTime.plusDays(1);
Run Code Online (Sandbox Code Playgroud)
当我打印dateTime时,我得到了这个日期2013-05-08T00:00:00.000+06:30.joda约会时间没有增加一天.我没有发现任何错误.
谢谢
我正在使用Joda解析包含日期/时间的第三方日志文件.日期/时间是两种不同格式之一,具体取决于我正在解析的日志文件的年龄.
目前我的代码如下:
try {
return DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss").parseDateTime(datePart);
} catch (IllegalArgumentException e) {
return DateTimeFormat.forPattern("E, MMM dd, yyyy HH:mm").parseDateTime(datePart);
}
Run Code Online (Sandbox Code Playgroud)
这有效但违反了Joshua Bloch关于Effective Java 2nd Edition的建议(第57项:仅在特殊条件下使用例外).它还使得很难确定是否由于日志文件中的日期/时间搞乱而发生IllegalArgumentException.
你能否提出一个不会滥用例外的更好的方法?
我需要计算从特定日期到现在所用的时间,并以与StackOverflow问题相同的格式显示它,即:
15s ago
2min ago
2hours ago
2days ago
25th Dec 08
Run Code Online (Sandbox Code Playgroud)
您知道如何使用Java Joda-Time库实现它吗?是否有一个已经实现它的辅助方法,或者我应该自己编写算法?
我有一份准备好的声明
INSERT INTO mst(time) VALUES (?);
Run Code Online (Sandbox Code Playgroud)
其中时间是类型的时间戳在的PostgreSQL数据库.
我正在插入一个Joda-Time DateTime对象,或者我应该说我正在尝试.我找不到将DateTime对象转换为java.sql.Timestamp的方法.我已经阅读了Joda-Time文档并且没有参考这个.
谢谢.