2017-08-07 2 views
0

Dozerフレームワークを使用してあるクラスの属性を別のクラスにコピーしています。UTCの日付/時刻をローカル形式に変換します。どのようにJavaを使ってDozer Convertメソッドからフィールドにアクセスするのですか?

public class Source { 

    private BigDecimal customerid; 
    private BigDecimal tenantid; 
    private BigDecimal salutation; 
    private String timezone; 
    private Calendar createdate; 
} 

public class Target { 

    private BigDecimal customerid; 
    private String timezone; 
    private String createdate; 
} 

これまでのところ、関数が作成され、以下の2行を実行するときに正常に動作している:

List<Source> customrlist = customerdao.findByTenantid(tenantid); 

// copy the data into the structure that is to be returned to the client 
List<Target> actual = DozerListServices.map(mapper, customrlist, 
     Target.class); 

は今、変更を行うための要望があります。

(ソースクラス内で)使用されている属性の1つがカレンダーです。

目標は、「カレンダー」を「ターゲット」クラスの「文字列」に変換することです。

public class DozerStringToCalTimeConvert extends 
     DozerConverter<String, Calendar> { 

    public DozerStringToCalTimeConvert() { 
     super(String.class, Calendar.class); 
    } 


    @Override 
    public Calendar convertTo(String source, Calendar destination) { 

     if (!StringUtils.hasLength(source)) { 
      return null; 
     } 
     Calendar dt = null; 

     return dt; 
    } 

    @Override 
    public String convertFrom(Calendar source, String destination) { 
     if (source == null) { 
      return null; 
     } 
     return source.toString(); 
    } 
} 
:だろう。このようになります - これを行うためには、「DozerConverter」を使用することが提案されている

:(YYYY-MM-DD EX)文字列は、特定の形式になります

Formattersを使用してカレンダーをCorret表現(例:YYYY-MM-DD)に変換できますが、日付はUTC形式であるという問題があります。 「ソース」クラスの属性の1つが「タイムゾーン」です。タイムゾーンは 'America/Chicago'、 'US/Eastern'などのようになります。UTC時刻をローカル時刻に変換するには、「タイムゾーン」情報が必要です。上記のサンプルコンバーターコードを使用すると、ソースクラスから "タイムゾーン"にアクセスできるように、どのように変更することができますか?

TIA

答えて

0

java.time

Calendarクラスは今java.timeクラスに取って代わら遺産、です。

ほとんどの場合、Calendarオブジェクトは実際にはGregorianCalendarです。 instanceOfでテストしてください。その場合は、キャストしてjava.time.ZonedDateTimeに変換してください。

if (myCal instanceOf GregorianCalendar) { 
    GregorianCalendar gc = (GregorianCalendar) myCal ; 
    ZonedDateTime zdt = gc.toZonedDateTime() ; 
    LocalDate ld = zdt.toLocalDate() ; // A date-only value deduced from the time zone assigned. 
    String output = ld.toString() ; // Generate string in standard ISO 8601 format YYYY-MM-DD. 
} 
+0

回答ありがとうございます。上記のように、私はあなたが "ZonedDateTime"を使うべきであることを知っています。使用されているゾーンはローカルではありませんが、DBからフェッチされます。上の "ソース"クラスには、 "タイムゾーン"と呼ばれるゾーンのフィールドがあります。この値は、 "DozerConverter"を拡張したクラスからアクセスできますか?上記の "DozerStringToCalTimeConvert"コンバータクラスを参照してください。属性はメソッド "convertTo"または "convertFrom"からアクセスできますか?もしそうなら、どうですか? –

+0

「convertTo」または「convertFrom」のどちらのメソッドでも「instanceOf」を使用できますか? TIA –

+0

@CaseyHarrils 'instanceOf'については、私の編集と[Oracle.com Tutorial](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html)を参照してください。私はドーザーのことを何も知らないので、私はあなたを助けることができません。 –

関連する問題