Recipe Name:
Rewrite DateTime withZoneRetainFields to java.time equivalent
Description:
Rewrite DateTime withZoneRetainFields to java.time equivalent
Level:
warning
Language:
- java
Tags:
- framework specific
- java.time
- Joda-Time
- quality
Documentation
Migrate from org.joda.time.DateTime to Java Time
Joda-Time DateTime migrates to java.time ZonedDateTime or OffsetDateTime.
ZonedDateTime is the same concept, date and time with time-zone.
OffsetDateTime is a new concept, date and time with offset from UTC.
BeforeDateTime dateTime = new DateTime(); int monthOfYear = dateTime.getMonthOfYear();After
ZonedDateTime dateTime = ZonedDateTime.now(); int monthOfYear = dateTime.getMonthValue();References
Recipe
id: scw:java.time:Joda-Time:DateTime-withZoneRetainFields version: 10 metadata: name: Rewrite DateTime withZoneRetainFields to java.time equivalent shortDescription: Rewrite DateTime withZoneRetainFields to java.time equivalent level: warning language: java enabled: true comment: |- Joda-Time's DateTime class provided a withZoneRetainFields method to create a new DateTime object from an existing DateTime, using the same date and time fields but in a different Zone. In java.time, the same behaviour is available however the method names are more specifically named, and slightly different depending on whether you are starting from a ZonedDateTime or OffsetDateTime object. This recipe is designed to match on broken code as part of an overall Joda-Time to java.time migration. The method that is being searched for does not actually exist on ZoneDateTime/OffsetDateTime. After migrating a DateTime instance to a ZoneDateTime or OffsetDateTime, subsequent calls may be made to methods that existed for DateTime, but no longer exist for ZonedDateTime/OffsetDateTime. This recipe matches on the methodname that no longer exists, and suggests an equivalent rewrite that will work for java.time. descriptionFile: descriptions/datetime.html tags: framework specific;java.time;Joda-Time;quality search: methodcall: args: 1: type: java.time.ZoneId name: withZoneRetainFields anyOf: - type: java.time.OffsetDateTime - type: java.time.ZonedDateTime availableFixes: - name: 'Rewrite withZoneRetainFields to java.time equivalent: withZoneSameLocal' availableIf: markedElement: is: methodcall: type: java.time.ZonedDateTime actions: - rewrite: to: '{{{ qualifier }}}.withZoneSameLocal({{{ arguments.0 }}})' - modifyAssignedVariable: type: java.time.ZonedDateTime - name: 'Rewrite withZoneRetainFields to java.time equivalent: atZoneSimilarLocal' availableIf: markedElement: is: methodcall: type: java.time.OffsetDateTime actions: - modifyAssignedVariable: type: java.time.ZonedDateTime - rewrite: to: '{{{ qualifier }}}.atZoneSimilarLocal({{{ arguments.0 }}})' - name: Rewrite withZoneRetainFields to java.time equivalent withOffsetSameLocal availableIf: markedElement: is: methodcall: args: 1: type: java.time.ZoneOffset type: java.time.OffsetDateTime actions: - rewrite: to: '{{{ qualifier }}}.withOffsetSameLocal({{{ arguments.0 }}})' - modifyAssignedVariable: type: java.time.OffsetDateTime