TimeZone.setDefault(TimeZone.getTimeZone("GMT-7:00"));
Run Code Online (Sandbox Code Playgroud)
这会处理夏令时时区吗?
或者
仅需要区域名称,例如:“America/Lost_Angeles”?
public static void main(String[] args) {
System.out.println("Norfolk Island times as per Joda Time");
IntStream.range(1, 13)
.forEach(month -> System.out.println(DateTime.now((DateTimeZone.forID("Pacific/Norfolk")))
.withYear(2023)
.withMonthOfYear(month)
.withDayOfMonth(10)
.withHourOfDay(2)
.withMinuteOfHour(10)
.withSecondOfMinute(2)
.withMillisOfSecond(0)));
System.out.println("-------------------------------------");
System.out.println("Norfolk Island times as per JDK OffsetDateTime");
IntStream.range(1, 13)
.forEach(month -> System.out.println(OffsetDateTime.now(ZoneId.of("Pacific/Norfolk"))
.withYear(2023)
.withMonth(month)
.withDayOfMonth(10)
.withHour(2)
.withMinute(10)
.withSecond(2)
.withNano(0)));
System.out.println("-------------------------------------");
}
Run Code Online (Sandbox Code Playgroud)
输出:
Norfolk Island times as per Joda Time
2023-01-10T02:10:02.000+12:00
2023-02-10T02:10:02.000+12:00
2023-03-10T02:10:02.000+12:00
2023-04-10T02:10:02.000+11:00
2023-05-10T02:10:02.000+11:00
2023-06-10T02:10:02.000+11:00
2023-07-10T02:10:02.000+11:00
2023-08-10T02:10:02.000+11:00
2023-09-10T02:10:02.000+11:00
2023-10-10T02:10:02.000+12:00
2023-11-10T02:10:02.000+12:00
2023-12-10T02:10:02.000+12:00
-------------------------------------
Norfolk Island times as per JDK OffsetDateTime
2023-01-10T02:10:02+11:00
2023-02-10T02:10:02+11:00
2023-03-10T02:10:02+11:00
2023-04-10T02:10:02+11:00
2023-05-10T02:10:02+11:00 …Run Code Online (Sandbox Code Playgroud) 我在构造DateTime(或LocalDate)时遇到了问题.我正在转换旧代码以在内部使用joda来使事情更加清晰.但是我遇到了+1900问题......
这通过:
assertEquals(2082, new Date(2082, 1, 1).getYear());
Run Code Online (Sandbox Code Playgroud)
这两个都失败了:
assertEquals(2083, new LocalDate(new Date(2083, 1, 1)).getYear());
assertEquals(2084, new DateTime(new Date(2084, 1, 1)).toLocalDateTime().getYear());
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?如何从Date对象获取DateTime?
我想从ISO8601 String创建一个DateTime对象(例如2012-11-05T07:00:00+0000).这是代码:
...
DateTime day = new DateTime(dateStr);
System.out.println(dateStr + "=>" + day);
Run Code Online (Sandbox Code Playgroud)
我得到了这些结果:
...
2012-11-04T07:00:00+0000=>2012-11-04T00:00:00.000-07:00
2012-11-05T07:00:00+0000=>2012-11-04T23:00:00.000-08:00
2012-11-06T08:00:00+0000=>2012-11-06T00:00:00.000-08:00
...
Run Code Online (Sandbox Code Playgroud)
11-04并且11-06是正确的,但是11-05错了.怎么解决?我在北美西海岸.
我试着用这个:
secondsFromMidnight = Seconds.secondsBetween(localDateTime.toLocalDate(),
localDateTime).getSeconds();
Run Code Online (Sandbox Code Playgroud)
但它引发了一个例外(参见下文).我认为这是一个很好的方法,但我还没有成功地适应我的情况.如果我写这个:
DateTime dateTimeFromMidnight = new DateMidnight(localDateTime.getChronology()).toDateTime();
Duration duration = new Duration(dateTimeFromMidnight, localDateTime.toDateTime());
Run Code Online (Sandbox Code Playgroud)
它与时区混淆(我少了1小时).
如果您的解决方案也可轻松适应数小时,分钟等,那么这是一个优势.
我绝对需要使用LocalDateTime作为输入类型,请不要在其他类中发布解决方案.
Exception in thread "main" java.lang.IllegalArgumentException: ReadablePartial objects must have the same set of fields
at org.joda.time.base.BaseSingleFieldPeriod.between(BaseSingleFieldPeriod.java:92)
at org.joda.time.Seconds.secondsBetween(Seconds.java:124)
Run Code Online (Sandbox Code Playgroud) 我必须在特定日期范围之间为每个月的每一天创建表格(例如,2012-01-30至2013-04-30).我正在尝试使用三个for循环和DateTime isBefore方法来执行此操作,但是我的循环无限运行(尽管日期,月份和年份按其应有的方式递增).我在下面写的代码片段,
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm");
DateTime startDate = dtf.parseDateTime(startDateTime);
DateTime endDate = dtf.parseDateTime(endDateTime);
try{
for(DateTime y=startDate;y.isBefore(endDate);y=y.plusYears(1)) {
for(DateTime month=startDate;startDate.isBefore(endDate);month=month.plusMonths(1)) {
for(DateTime date=startDate;startDate.isBefore(endDate);date=date.plusDays(1)){
String sqlStmt = "CREATE TABLE IF NOT EXISTS...
...
}
}
}
} catch (SQLException e) {
StackTraceElement stack = e.getStackTrace()[2];
}
Run Code Online (Sandbox Code Playgroud)
我的表是按照我想要的方式创建的,所以我正在尝试执行的sqlstmt没有问题,只是一旦遇到endDate,循环就不会终止.我是Java的新手,所以不太确定我在这里做错了什么.任何建议都会非常有用!!!
谢谢!
如何使用Joda-Time datetime 解析日期字符串,该日期时间使用正确的时区和夏令时?
作为scala中的示例,我尝试解析字符串"2014-04-07 01:00:00.000"(没有时区信息).这个日期来自MySQL,应该在tz Europe/Berlin +01:00.我喜欢的是根据2014-04-07 00:00:00 + 01:00的joda约会时间,这是欧洲/柏林目前没有在DST(GMT +1)的时区.
val fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS").withZone(DateTimeZone.forID("Europe/Berlin"))
val dt = fmt.parseDateTime("2014-04-07 01:00:00.000")
Run Code Online (Sandbox Code Playgroud)
不幸的是,Joda-Time将日期解析为2014-04-07T01:00:00.000 + 02:00,这是当前错误的偏移(02:00而不是01:00)
任何想法如何让Joda-Time用正确的DST偏移解析日期?
我正在寻找使用JodaTime每月创建固定日期的任何方式。我有一个JSpinner来设置整数值,我想获取此值并创建日期。例如:JSpinner的有15个,我想创建之日起2016-09-15,2016-10-15,2016-11-15。
如何使用JodaTime做到这一点?
我在Android上使用ACTION_TIMEZONE_CHANGED意图过滤器来响应时区更改.
我注意到Jodas当前时区目前没有更新使用:
DateTimeZone.getDefault()
当我使用Java的默认值时TimeZone.getDefault(),时区是正确的.
注意:当我再次更改它时:Joda具有我之前更改过的值.所以它落后了(当Android激发广播意图时尚未更新).
所以我只能将Java时区用于当前时区.但我的域对象使用Joda DateTimeZone.现在我想将当前时区与我的域对象中的时区进行比较.保存这样做:
TimeZone currenTimeZone = TimeZone.getDefault();
if(action.getLocation().getDateTimeZone().getID().equals(currenTimeZone.getID()))) {
[...]
}
Run Code Online (Sandbox Code Playgroud)
?或者两个库之间的时区ID可以不同吗?
在我的Java项目中,我希望将圆形日期时间秒除以5.
I have got - I want
12:00:01 - 12:00:00
12:00:04 - 12:00:05
12:00:06 - 12:00:05
12:00:07 - 12:00:05
12:00:08 - 12:00:10
...
12:00:58 - 12:01:00
Run Code Online (Sandbox Code Playgroud)
日期对象包含日期,例如:Fri May 12 12:00:03 CEST 2017
我想要圆形秒数来模数5.我想要使用舍入秒来实现Date对象.
我怎么能用简单的数学运算Joda呢?