Tag: jodatime

使用Joda-Time获取给定日期和时区的UTC偏移量

我的日期格式为20Jan2013,08Aug2012等,具有自己的特定时区。 例如,20Jan2013可能具有澳大利亚/墨尔本的时区ID,而08Aug2012可能具有欧洲/伦敦的ID。 我想要做的是,根据这些时区和日期,计算给定日期该时区的UTC偏移量。 到目前为止我已经想出了这个: DateTimeFormatter dtf = DateTimeFormat.forPattern(“ZZ”); DateTimeFormatter dtf1 = DateTimeFormat.forPattern(“ddMMMYYYY”); DateTimeZone zone = DateTimeZone.forID(“Australia/Melbourne”); DateTime thisDate = dtf1.parseDateTime(“30Jul2013”); System.out.println(“\nZone: ” + thisDate.withZone(zone)); 这给了我输出: Zone: 2013-07-30T00:00:00.000+10:00 这是正确的,但我想从中提取UTC偏移量,在这种情况下是+10:00。 我已经找到了办法,但找不到任何东西。 有什么方法可以做到这一点吗? 我看到的唯一选择是将输出转换为String并使用substring方法获取UTC偏移量。 上面的代码确实考虑了DST(夏令时)。 所以例如,如果我有:DateTime thisDate = dtf1.parseDateTime(“30Jan2013”​​); 输出将是:2013-01-30T00:00:00.000 + 11:00 (+11:00而不是+10:00) 所以基本上我需要做的就是找到一种从2013-07-30T00:00:00.000 + 11:00提取+11:00的方法。 请帮忙!

将Joda-Time DateTime – ISO 8601格式日期转换为其他日期格式

在我的Java应用程序中,我使用Joda-Time将应用程序用户输入的日期从MM / dd / yyyy转换为ISO 8601格式,以便将其保存在DB中。 有人可以告诉我如何使用Joda-Time将ISO 8601日期转换回MM / dd / yyyy格式吗? 我的代码将用户日期转换为ISO 8601日期格式: String date1 = “05/05/2013”; DateTimeFormatter parser1 = DateTimeFormat.forPattern(“MM/dd/yyyy”); DateTime dateTimeObj1 = DateTime.parse(date1,parser1); DateTimeFormatter isoDateFormat = ISODateTimeFormat.dateTime(); String isoDateStr = isoDateFormat.print(dateTimeObj1); System.out.println(isoDateStr);

在Joda-Time中,将DateTime设置为月初

我的API允许库客户端传递日期: method(java.util.Date date) 使用Joda-Time ,从这一天开始,我想提取月份,并迭代本月所有日子。 现在,传递的日期通常是新的Date() – 意味着当前的瞬间。 我的问题实际上是将新的DateMidnight(jdkDate)实例设置为月初。 有人可以用Joda-Time演示这个用例吗?

重写BeanPropertyRowMapper以支持JodaTime DateTime

My Domain对象有几个Joda-Time DateTime字段。 当我使用SimpleJdbcTemplate读取数据库值时: 患者患者= jdbc.queryForObject(sql,new BeanPropertyRowMapper(Patient.class),patientId); 它只是失败,令人惊讶的是,没有记录任何错误。 我想这是因为解析到DateTime的timestamp不适用于Jdbc。 如果可以inheritance和覆盖BeanPropertyRowMapper并指示将所有java.sql.Timestamp和java.sql.Date转换为DateTime ,那么它会很棒并且可以节省大量额外代码。 任何建议?

在Hibernate中持久化Joda DateTime而不是Java Date

我的实体目前包含java Date属性。 我开始经常使用Joda Time进行日期操作和计算。 这意味着我不得不将我的日期转换为Joda DateTime对象并再次返回。 所以我想知道,有什么理由我不应该只更改我的实体来存储Joda DateTime对象而不是Java Date对象? 请注意,这些实体是通过Hibernate持久化的。 我找到了jodatime-hibernate项目,但我也在Joda邮件列表上读到它与较新版本的hibernate不兼容。 而且似乎维护得不是很好。 所以我想知道是否最好继续在Date和DateTime之间进行转换,或者是否明智地开始持久化DateTime对象。 我担心的是依赖于维护不善的图书馆。 编辑:请注意,我的目标之一是更好地存储时区信息。 仅存储日期似乎将日期保存在本地时区。 由于我的应用程序可以在全球范围内使用,我也需要知道时区。 Joda Time Hibernate似乎也在用户指南中解决了这个问题。

来自joda-time DateTimeFormatter的模式字符串?

是否可以从joda-time DateTimeFormatter获取模式字符串? DateTimeFormatter formatter = DateTimeFormat.forPattern(“yyyyMMdd”); String originalPattern = formatter. ???

在Joda Time中查看包含日期范围

我正在使用Joda Time 2.1库。 我写了一个方法来比较给定日期是否在日期范围之间。 我希望它包含在开始日期和结束日期。我使用了LocalDate因为我不想考虑时间部分只是日期部分。 下面是它的代码。 isDateBetweenRange(LocalDate start,LocalDate end,LocalDate target){ System.out.println(“Start Date : ” +start.toDateTimeAtStartOfDay(DateTimeZone.forID(“EST”)); System.out.println(“Target Date : ” +targettoDateTimeAtStartOfDay(DateTimeZone.forID(“EST”)); System.out.println(“End Date : ” +end.toDateTimeAtStartOfDay(DateTimeZone.forID(“EST”)); System.out.println(target.isAfter(start)); System.out.println(target.isBefore(end)); } 上述方法的输出是: Start Date: 2012-11-20T00:00:00.000-05:00 Target Date: 2012-11-20T00:00:00.000-05:00 End Date : 2012-11-21T00:00:00.000-05:00 target.isAfter(start) : false target.isBefore(end) : true 我的问题是target.isAfter(start)为false,即使target日期和start具有相同的值。 我希望target >= start但在这里它只考虑target > start 。 我希望它具有包容性。 这是否意味着isAfter方法专门找到匹配? 我已经浏览了Joda […]

使用Joda或standart Java API检查日期是否在时间范围内

我有第一次作为字符串’12:00:00’和另一个’19:00:00’。 如何检查当天的时间部分是否在这些时间值内?

使用Joda时间获取给定时区的当前墙时间

要求是简单地获取给定时区的当前墙时间( 包括正确的DST调整 )。 似乎有一些问题在这里徘徊,但我似乎无法找到一个直接的答案(在SO,Joda doco或谷歌搜索)与低摩擦的方式来获得墙上的时间。 看起来像给定的输入(当前UTC时间和期望的TZ)我应该能够从Joda Time库链接一些方法来实现我想要的但是在所述示例中似乎希望评估+处理偏移/应用程序代码中的转换 – 我希望尽可能避免这种情况,并根据其可用的静态TZ规则集使用Jodas尽力而为。 出于这个问题的目的,我们假设我不会使用任何其他第三方服务(基于网络或其他二进制文件),只有JDK和JodaTime库提供的服务。 任何指针赞赏。 更新:这实际上是代表我的失误。 我根据请求经度得到了一个计算的 UTC偏移量,虽然这显然仍然需要区域信息才能获得正确的DST调整。 double aucklandLatitude = 174.730423; int utcOffset = (int) Math.round((aucklandLatitude * DateTimeConstants.HOURS_PER_DAY) / 360); System.out.println(“Offset: ” + utcOffset); DateTimeZone calculatedDateTimeZone = DateTimeZone.forOffsetHours(utcOffset); System.out.println(“Calculated DTZ: ” + calculatedDateTimeZone); System.out.println(“Calculated Date: ” + new DateTime(calculatedDateTimeZone)); System.out.println(); DateTimeZone aucklandDateTimeZone = DateTimeZone.forID(“Pacific/Auckland”); System.out.println(“Auckland DTZ: ” + […]

Joda Time用时区解析日期并保留该时区

我想解析一个使用特定时区创建的日期,将其转换为格式并返回。 转换有效但时区偏移始终设置为+0000,并根据需要添加/减去时差。 如何使其格式化并保持偏移正确? 我期待这个:2012-11-30T12:08:56.23 + 07:00 但得到这个:2012-11-30T05:08:56.23 + 00:00 执行: public static final String ISO_8601_DATE_FORMAT = “yyyy-MM-dd’T’HH:mm:ss.SSZZ”; public static String formatDateToISO8601Standard(Date date) { DateTime dateTime = new DateTime(date); DateTimeFormatter df = DateTimeFormat.forPattern(ISO_8601_DATE_FORMAT); return dateTime.toString(df); } 测试类: private static final String DATE_WITH_TIMEZONE = “30 11 2012 12:08:56.235 +0700”; private static final String EXPECTED_DATE_WITH_TIMEZONE = “2012-11-30T12:08:56.23+07:00”; @Test […]