我怎样才能转换Date成DateTime反之亦然?
例如
Date dt = new Date();
Run Code Online (Sandbox Code Playgroud)
现在我想转发它DateTime.
也
DateTime dtim = new DateTime();
Run Code Online (Sandbox Code Playgroud)
现在我想将它转换为Date.
我正在使用Joda,我正在创建一个类来存储事务的时间戳并持久保存到数据库.我应该使用一个Instant还是一个DateTime?
我在一个项目中工作,我在Date中有两种类型.我想计算这两个日期之间的周数.日期可能是不同的年份.对此有什么好的解决方案吗?
我试图用其他主题中提出的Joda-time来实现这一点.
我不熟悉这个库,但我尝试做这样的事情:
public static int getNumberOfWeeks(Date f, Date l){
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(f);
c2.setTime(l);
DateTime start = new DateTime(c1.YEAR, c1.MONTH, c1.DAY_OF_MONTH, 0, 0, 0, 0);
DateTime end = new DateTime(c2.YEAR, c2.MONTH, c2.DAY_OF_MONTH, 0, 0, 0, 0);
Interval interval = new Interval(start, end);
Period p = interval.toPeriod();
return p.getWeeks();
}
Run Code Online (Sandbox Code Playgroud)
但这完全错了......有什么建议吗?
我正在使用JodaTime 2.1,我正在寻找一种单元测试代码的模式,该代码执行日期/时间操作以确保它在所有时区都表现良好且独立于DST.
特别:
new DateTime()来获取当前时间)我有LocalDate包含日期2012-12-28,我希望与本地的月名称(即十二月波兰)打印出来的所有格这在波兰是主格不同(grudnia和grudzień分别).因为我也想使用自定义格式,我创建了自己的DateTimeFormatter使用DateTimeFormatterBuilder(在Joda-Time中,AFAIK是正确的方式):
private static final DateTimeFormatter CUSTOM_DATE_FORMATTER
= new DateTimeFormatterBuilder()
.appendLiteral("z dnia ")
.appendDayOfMonth(1)
.appendLiteral(' ')
.appendText(new MonthNameGenitive()) // <--
.appendLiteral(' ')
.appendYear(4, 4)
.appendLiteral(" r.")
.toFormatter()
.withLocale(new Locale("pl", "PL")); // not used in this case apparently
Run Code Online (Sandbox Code Playgroud)
输出应为" z dnia 28 grudnia 2012 r. ".
我的问题是关于标有箭头的线:我应该如何实施MonthNameGenitive?目前它扩展DateTimeFieldType并且有很多代码:
final class MonthNameGenitive extends DateTimeFieldType {
private static final long serialVersionUID = 1L;
MonthNameGenitive() {
super("monthNameGenitive");
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 有人可以向我解释为什么当我试图获得一个与我自己的区域不同的DateTime的毫秒时,它会让我回到我本地机器的时区的毫秒数?我希望得到UTC的毫秒数,但我的应用程序的本地设置被设置为EST(即使我实际上在爱尔兰;))
这是代码:
DateTimeFormatter format = DateTimeFormat.mediumDateTime();
DateTime local = new DateTime();
DateTime utc = new DateTime(System.currentTimeMillis(), DateTimeZone.UTC);
System.out.println("utc zone = " +utc.getZone());
System.out.println("UTC time: " + utc);
long current = utc.getMillis();
System.out.println("current: " + format.print(current));
System.out.println("local: " + format.print(local.getMillis()));
Run Code Online (Sandbox Code Playgroud)
这是它打印的内容:
utc zone = UTC
UTC time: 2013-08-16T13:36:32.444Z
current: Aug 16, 2013 9:36:32 AM
local: Aug 16, 2013 9:36:32 AM
Run Code Online (Sandbox Code Playgroud)
目前,我认为它应该具有与UTC时间相同的日期时间?
我目前有一个Joda日期解析器,它使用DateTimeFormatterBuilder,我可能会收到六种不同的日期格式.
我正在迁移到Java 8的Date例程,并没有看到等效的.
如何使用Java 8 Dates做这样的事情?
DateTimeParser[] parsers = {
DateTimeFormat.forPattern( "yyyy/MM/dd HH:mm:ss.SSSSSS" ).getParser() ,
DateTimeFormat.forPattern( "yyyy-MM-dd HH:mm:ss" ).getParser() ,
DateTimeFormat.forPattern( "ddMMMyyyy:HH:mm:ss.SSS Z" ).getParser() ,
DateTimeFormat.forPattern( "ddMMMyyyy:HH:mm:ss.SSS" ).getParser() ,
DateTimeFormat.forPattern( "ddMMMyyyy:HH:mm:ss.SSSSSS" ).getParser() ,
DateTimeFormat.forPattern( "yyyy-MM-dd HH:mm:ss.SSS" ).getParser()
};
DateTimeFormatter dateTimeFormatterInput = new DateTimeFormatterBuilder()
.append( null, parsers ).toFormatter();
Run Code Online (Sandbox Code Playgroud) 有没有人知道Joda Time或Java本身是否有一个方法,它接受一个int或一个String作为参数,例如4或"4"并以短格式给出月份的名称,即1月的JAN?
我想可以截断长月份名称并将其转换为大写.
我遇到了https://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html.
1)我目前正在将Java Calendar迁移到joda-time.我想知道,我应该使用threeten而不是joda-time吗?三生产准备好了吗?
2)三个库和joda-time库可以在同一个应用程序中一起存在吗?因为我正在使用一些使用joda-time库的第三方库.
3)joda-time会不会成为一个放弃项目,因为有三个?
请告诉我如何将毫秒转换为joda日期时间?
formatter = DateTimeFormat.forPattern("dd/MM/yyyy'T'HH:mm:ss").withZone(DateTimeZone.forOffsetHoursMinutes(00, 00));
Run Code Online (Sandbox Code Playgroud)
甚至尝试过
String millisecond="14235453511"
DateTime.parse(millisecond);
Run Code Online (Sandbox Code Playgroud)