1616import java .time .LocalTime ;
1717import java .time .temporal .TemporalAccessor ;
1818import java .util .Arrays ;
19+ import java .util .Calendar ;
1920import java .util .Date ;
2021import java .util .HashMap ;
2122import java .util .Iterator ;
2223import java .util .Map ;
2324import java .util .Map .Entry ;
2425import java .util .Objects ;
2526import java .util .Set ;
27+ import java .util .TimeZone ;
2628import java .util .TreeSet ;
2729import java .util .regex .Pattern ;
2830import javax .xml .stream .XMLInputFactory ;
@@ -474,22 +476,15 @@ public static void computeSUVFactor(Attributes dicomObject, Taggable taggable, i
474476 Date injectDateTime =
475477 DicomUtils .getDateFromDicomElement (
476478 dcm , Tag .RadiopharmaceuticalStartDateTime , null );
477- Date acquisitionDateTime =
478- TagUtil .dateTime (
479- DicomUtils .getDateFromDicomElement (dicomObject , Tag .AcquisitionDate , null ),
480- DicomUtils .getDateFromDicomElement (dicomObject , Tag .AcquisitionTime , null ));
481- Date scanDate = DicomUtils .getDateFromDicomElement (dicomObject , Tag .SeriesDate , null );
479+ Date acquisitionDateTime = dicomObject .getDate (Tag .AcquisitionDateAndTime );
480+ Date scanDate = dicomObject .getDate (Tag .SeriesDateAndTime );
482481 if ("START" .equals (dicomObject .getString (Tag .DecayCorrection ))
483482 && totalDose != null
484483 && halfLife != null
485484 && acquisitionDateTime != null
486485 && (injectDateTime != null || (scanDate != null && injectTime != null ))) {
487486 double time = 0.0 ;
488- long scanDateTime =
489- TagUtil .dateTime (
490- scanDate ,
491- DicomUtils .getDateFromDicomElement (dicomObject , Tag .SeriesTime , null ))
492- .getTime ();
487+ long scanDateTime = scanDate .getTime ();
493488 if (injectDateTime == null ) {
494489 if (scanDateTime > acquisitionDateTime .getTime ()) {
495490 // per GE docs, may have been updated during post-processing into new series
@@ -504,7 +499,8 @@ public static void computeSUVFactor(Attributes dicomObject, Taggable taggable, i
504499 }
505500 }
506501 if (scanDate != null ) {
507- injectDateTime = TagUtil .dateTime (scanDate , injectTime );
502+ injectDateTime =
503+ dateTime (dicomObject .getTimeZone (), scanDate , injectTime , false );
508504 time = (double ) scanDateTime - injectDateTime .getTime ();
509505 }
510506
@@ -537,6 +533,30 @@ public static void computeSUVFactor(Attributes dicomObject, Taggable taggable, i
537533 }
538534 }
539535
536+ // Remove this method and use DateTimeUtils
537+ public static Date dateTime (TimeZone tz , Date date , Date time , boolean acceptNullDateOrTime ) {
538+ if (!acceptNullDateOrTime && (date == null || time == null )) {
539+ return null ;
540+ }
541+ Calendar calendar =
542+ tz == null || date == null ? Calendar .getInstance () : Calendar .getInstance (tz );
543+
544+ Calendar datePart = Calendar .getInstance ();
545+ datePart .setTime (date == null ? new Date (0 ) : date );
546+ calendar .set (Calendar .YEAR , datePart .get (Calendar .YEAR ));
547+ calendar .set (Calendar .MONTH , datePart .get (Calendar .MONTH ));
548+ calendar .set (Calendar .DAY_OF_MONTH , datePart .get (Calendar .DAY_OF_MONTH ));
549+
550+ Calendar timePart = Calendar .getInstance ();
551+ timePart .setTime (time == null ? new Date (0 ) : time );
552+ calendar .set (Calendar .HOUR_OF_DAY , timePart .get (Calendar .HOUR_OF_DAY ));
553+ calendar .set (Calendar .MINUTE , timePart .get (Calendar .MINUTE ));
554+ calendar .set (Calendar .SECOND , timePart .get (Calendar .SECOND ));
555+ calendar .set (Calendar .MILLISECOND , timePart .get (Calendar .MILLISECOND ));
556+
557+ return calendar .getTime ();
558+ }
559+
540560 public static double [] getFrameTime (Attributes attributes ) {
541561 double [] frameTimes = null ;
542562 String frameIncrementPointer = attributes .getString (Tag .FrameIncrementPointer , null );
0 commit comments