OSDN Git Service

fix: プログラム内部ではUTC時間で日時を管理する
authorhayashi <hayashi.yuu@gmail.com>
Fri, 30 Jun 2017 06:26:41 +0000 (15:26 +0900)
committerhayashi <hayashi.yuu@gmail.com>
Fri, 30 Jun 2017 06:26:41 +0000 (15:26 +0900)
importPicture/doc/EXiF.class.violet.html [new file with mode: 0644]
importPicture/src/osm/jp/gpx/ElementMapTRKPT.java
importPicture/src/osm/jp/gpx/ImportPicture.java
importPicture/src/osm/jp/gpx/TagTrkpt.java
importPicture/src/osm/jp/gpx/matchtime/gui/AdjustTime.java
importPicture/test/osm/jp/gpx/ElementMapTRKPTTest.java
importPicture/test/osm/jp/gpx/ImportPictureTest.java

diff --git a/importPicture/doc/EXiF.class.violet.html b/importPicture/doc/EXiF.class.violet.html
new file mode 100644 (file)
index 0000000..5a00acf
--- /dev/null
@@ -0,0 +1,595 @@
+<HTML>
+<HEAD>
+<META name="description"
+       content="Violet UML Editor cross format document" />
+<META name="keywords" content="Violet, UML" />
+<META charset="UTF-8" />
+<SCRIPT type="text/javascript">
+       function switchVisibility() {
+               var obj = document.getElementById("content");
+               obj.style.display = (obj.style.display == "block") ? "none" : "block";
+       }
+</SCRIPT>
+</HEAD>
+<BODY>
+       This file was generated with Violet UML Editor 2.1.0.
+       &nbsp;&nbsp;(&nbsp;<A href=# onclick="switchVisibility()">View Source</A>&nbsp;/&nbsp;<A href="http://sourceforge.net/projects/violet/files/violetumleditor/" target="_blank">Download Violet</A>&nbsp;)
+       <BR />
+       <BR />
+       <SCRIPT id="content" type="text/xml"><![CDATA[<ClassDiagramGraph id="1">
+  <nodes id="2">
+    <InterfaceNode id="3">
+      <children id="4"/>
+      <location class="Point2D.Double" id="5" x="30.0" y="170.0"/>
+      <id id="6" value="141bece1-4023-41c9-a2e8-8040d6e7de86"/>
+      <revision>1</revision>
+      <backgroundColor id="7">
+        <red>255</red>
+        <green>255</green>
+        <blue>255</blue>
+        <alpha>255</alpha>
+      </backgroundColor>
+      <borderColor id="8">
+        <red>0</red>
+        <green>0</green>
+        <blue>0</blue>
+        <alpha>255</alpha>
+      </borderColor>
+      <textColor reference="8"/>
+      <name id="9" justification="1" size="3" underlined="false">
+        <text>«ImageMetadata»</text>
+      </name>
+      <methods id="10" justification="0" size="4" underlined="false">
+        <text></text>
+      </methods>
+    </InterfaceNode>
+    <ClassNode id="11">
+      <children id="12"/>
+      <location class="Point2D.Double" id="13" x="20.0" y="260.0"/>
+      <id id="14" value="6f5f7c44-9cda-4fd2-8be1-9a94326f8747"/>
+      <revision>1</revision>
+      <backgroundColor reference="7"/>
+      <borderColor reference="8"/>
+      <textColor reference="8"/>
+      <name id="15" justification="1" size="3" underlined="false">
+        <text>JpegImageMetadata</text>
+      </name>
+      <attributes id="16" justification="0" size="4" underlined="false">
+        <text></text>
+      </attributes>
+      <methods id="17" justification="0" size="4" underlined="false">
+        <text>+ getExif(): TiffImageMetadata</text>
+      </methods>
+    </ClassNode>
+    <ClassNode id="18">
+      <children id="19"/>
+      <location class="Point2D.Double" id="20" x="300.0" y="260.0"/>
+      <id id="21" value="b966178f-c278-495a-a66e-05110715a8ba"/>
+      <revision>1</revision>
+      <backgroundColor reference="7"/>
+      <borderColor reference="8"/>
+      <textColor reference="8"/>
+      <name id="22" justification="1" size="3" underlined="false">
+        <text>exif : TiffImageMetada
+</text>
+      </name>
+      <attributes id="23" justification="0" size="4" underlined="false">
+        <text>- content: TiffContents</text>
+      </attributes>
+      <methods id="24" justification="0" size="4" underlined="false">
+        <text>+ getOutputSet(): TiffOutputSet</text>
+      </methods>
+    </ClassNode>
+    <ClassNode id="25">
+      <children id="26"/>
+      <location class="Point2D.Double" id="27" x="1010.0" y="240.0"/>
+      <id id="28" value="19de1c4a-6a41-49c5-bf2a-8a1faeba9a24"/>
+      <revision>1</revision>
+      <backgroundColor reference="7"/>
+      <borderColor reference="8"/>
+      <textColor reference="8"/>
+      <name id="29" justification="1" size="3" underlined="false">
+        <text>TiffOutputDirectory
+(gpsDirectory)</text>
+      </name>
+      <attributes id="30" justification="0" size="4" underlined="false">
+        <text></text>
+      </attributes>
+      <methods id="31" justification="0" size="4" underlined="false">
+        <text>+ getFields(): List&lt;TiffOutputField&gt;
++ removeField(key: TiffOutputField.tagInfo)
++ add(tagInfo:TagInfoAscii, values:String[]) : void</text>
+      </methods>
+    </ClassNode>
+    <ClassNode id="32">
+      <children id="33"/>
+      <location class="Point2D.Double" id="34" x="630.0" y="250.0"/>
+      <id id="35" value="b25d1b25-fdbb-4736-9b07-bbbe6e33860a"/>
+      <revision>1</revision>
+      <backgroundColor reference="7"/>
+      <borderColor reference="8"/>
+      <textColor reference="8"/>
+      <name id="36" justification="1" size="3" underlined="false">
+        <text>TiffOutputSet
+(outputSet)</text>
+      </name>
+      <attributes id="37" justification="0" size="4" underlined="false">
+        <text></text>
+      </attributes>
+      <methods id="38" justification="0" size="4" underlined="false">
+        <text>+ getGPSDirectory(): TiffOutputDirectory</text>
+      </methods>
+    </ClassNode>
+    <ClassNode id="39">
+      <children id="40"/>
+      <location class="Point2D.Double" id="41" x="1090.0" y="450.0"/>
+      <id id="42" value="5a42e800-9f90-4fe9-abab-477a0852dee1"/>
+      <revision>1</revision>
+      <backgroundColor reference="7"/>
+      <borderColor reference="8"/>
+      <textColor reference="8"/>
+      <name id="43" justification="1" size="3" underlined="false">
+        <text>java.io.List</text>
+      </name>
+      <attributes id="44" justification="0" size="4" underlined="false">
+        <text></text>
+      </attributes>
+      <methods id="45" justification="0" size="4" underlined="false">
+        <text></text>
+      </methods>
+    </ClassNode>
+    <ClassNode id="46">
+      <children id="47"/>
+      <location class="Point2D.Double" id="48" x="1080.0" y="570.0"/>
+      <id id="49" value="06d3943c-473e-4695-aa69-2b3364e8f3f4"/>
+      <revision>1</revision>
+      <backgroundColor reference="7"/>
+      <borderColor reference="8"/>
+      <textColor reference="8"/>
+      <name id="50" justification="1" size="3" underlined="false">
+        <text>TiffOutputField</text>
+      </name>
+      <attributes id="51" justification="0" size="4" underlined="false">
+        <text>+ tagInfo</text>
+      </attributes>
+      <methods id="52" justification="0" size="4" underlined="false">
+        <text></text>
+      </methods>
+    </ClassNode>
+  </nodes>
+  <edges id="53">
+    <CompositionEdge id="54">
+      <start class="ClassNode" reference="18"/>
+      <end class="ClassNode" reference="11"/>
+      <startLocation class="Point2D.Double" id="55" x="70.0" y="20.0"/>
+      <endLocation class="Point2D.Double" id="56" x="140.0" y="50.0"/>
+      <transitionPoints id="57"/>
+      <id id="58" value="516b1ac1-150a-42fe-941a-2866baf497dd"/>
+      <revision>1</revision>
+      <bentStyle name="AUTO"/>
+      <startLabel>0..1</startLabel>
+      <middleLabel>getExif()</middleLabel>
+      <endLabel></endLabel>
+    </CompositionEdge>
+    <InterfaceInheritanceEdge id="59">
+      <start class="ClassNode" reference="11"/>
+      <end class="InterfaceNode" reference="3"/>
+      <startLocation class="Point2D.Double" id="60" x="90.0" y="50.0"/>
+      <endLocation class="Point2D.Double" id="61" x="80.0" y="30.0"/>
+      <transitionPoints id="62"/>
+      <id id="63" value="80e6e38d-53ef-4849-9d90-b9a2c2dc5fd0"/>
+      <revision>1</revision>
+      <bentStyle name="AUTO"/>
+      <startLabel></startLabel>
+      <middleLabel></middleLabel>
+      <endLabel></endLabel>
+    </InterfaceInheritanceEdge>
+    <CompositionEdge id="64">
+      <start class="ClassNode" reference="32"/>
+      <end class="ClassNode" reference="18"/>
+      <startLocation class="Point2D.Double" id="65" x="60.0" y="30.0"/>
+      <endLocation class="Point2D.Double" id="66" x="140.0" y="100.0"/>
+      <transitionPoints id="67"/>
+      <id id="68" value="b52729a0-5367-45b9-bd3d-d1987c830f25"/>
+      <revision>1</revision>
+      <bentStyle name="AUTO"/>
+      <startLabel>1</startLabel>
+      <middleLabel>getOutputSet()</middleLabel>
+      <endLabel></endLabel>
+    </CompositionEdge>
+    <CompositionEdge id="69">
+      <start class="ClassNode" reference="25"/>
+      <end class="ClassNode" reference="32"/>
+      <startLocation class="Point2D.Double" id="70" x="90.0" y="40.0"/>
+      <endLocation class="Point2D.Double" id="71" x="200.0" y="80.0"/>
+      <transitionPoints id="72"/>
+      <id id="73" value="0649afe3-3491-4c1b-a4c8-2f989dc6ad32"/>
+      <revision>1</revision>
+      <bentStyle name="AUTO"/>
+      <startLabel>1</startLabel>
+      <middleLabel>getGPSDirectory()</middleLabel>
+      <endLabel></endLabel>
+    </CompositionEdge>
+    <CompositionEdge id="74">
+      <start class="ClassNode" reference="39"/>
+      <end class="ClassNode" reference="25"/>
+      <startLocation class="Point2D.Double" id="75" x="70.0" y="20.0"/>
+      <endLocation class="Point2D.Double" id="76" x="120.0" y="100.0"/>
+      <transitionPoints id="77"/>
+      <id id="78" value="ccf5391a-467f-41bb-a2ef-32242e0b54a5"/>
+      <revision>1</revision>
+      <bentStyle name="VHV"/>
+      <startLabel>1</startLabel>
+      <middleLabel>getFields()</middleLabel>
+      <endLabel></endLabel>
+    </CompositionEdge>
+    <AggregationEdge id="79">
+      <start class="ClassNode" reference="46"/>
+      <end class="ClassNode" reference="39"/>
+      <startLocation class="Point2D.Double" id="80" x="80.0" y="30.0"/>
+      <endLocation class="Point2D.Double" id="81" x="70.0" y="40.0"/>
+      <transitionPoints id="82"/>
+      <id id="83" value="880de603-5ed4-41bc-9e00-d427598f30c6"/>
+      <revision>1</revision>
+      <bentStyle name="AUTO"/>
+      <startLabel>0..*</startLabel>
+      <middleLabel></middleLabel>
+      <endLabel></endLabel>
+    </AggregationEdge>
+  </edges>
+</ClassDiagramGraph>]]></SCRIPT>
+       <BR />
+       <BR />
+       <IMG alt="embedded diagram image" src="data:image/png;base64,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\r
+rK+vX7t27e3bt+0Ag028mzZtiv6xGYfvOBra639GJCKO/OxG4pJmrU/U7Gp2LQqQeNFSf1w72jij\r
+WT+1tbWN3FiVlrypqenSpUvp353vvn79emNj45dfftnb23vv3r2NGzcuXLhwTK3RGD+OTp48+bOf\r
+/Sz7leEnP/lJpN9hOaby53hHK4aOcuL967ndUc27Wp+o2ZF4QeLlRasXGeX6aWgTr3GsSoPl++e7\r
+169fn870ZlIYHjtrNGaPo/Pnz7/66qs/+tGPys+uT5s27eDBg44jrU9Qs6PMAYkX9eL4q5/u3r27\r
+YsWKqVOnNjU1ff3116nnw4cPN27cWN9v06ZN8TFNZ9++fTNnzswiUMlVx2lSdXV1s2fPPnLkSDb3\r
+6mNVWbySr7LhK1323NDQcOfOncJJjeYaReqO7RnflsTvsblvtLe3r1u3bvLkydXfBRK7x7lz5xxN\r
+Wp+gZlfmABIv6sXxVD+tWbNmw4YNPT09nZ2dH330UeoZmTD63+sXHfExTWfz5s0x5KVLlyLvlU98\r
+69at3333XXRcvHgxwme6Dm3AsWpf8uxjpXO8EdsqTWo012jKlCm3bt169OhR/B37+0as16Ta/PjH\r
+P166dOmNGzccU1qfoGZX5gDDlnihEvXiYOun/HnITF1dXTrhWanngwcP6uvrK+XMfM8YK/8POnv2\r
+bC1jDWPinT59+t27dwsnNZprtHv37o0bN6aoPJZ9//33ipEJQBGHxMto/o+A4U0x6nLUiyP+i+yA\r
+iff+/fvxsZak9/bbb1ef+0gn3nfffffTTz/Nj3Lo0KHe3t7RX6N79+59/PHHkXvH/r6xbNmyn//8\r
+5/X19dWL5t/85jfz5s1bs2bNtWvXHFPj5egGNTvKHBjjZZ3Ei3pxxOundevWtba2Pnr0qLu7e/Xq\r
+1VnPtWvXpmuAI0bGAJWS3uTJkyNApu6IQwcPHoyEeevWrQh72b2y1ccaxsTb1dU1a9asAwcOpGc1\r
+b9q0acmSJaO8Rnfu3Dl9+nSMEttzypQp4+I4+uyzzyL0Llq06Cc/+Ul51n3ppZcWL178+uuvt7e3\r
+O5q0PkHNrswBJF7Ui+Opfrp79+6qVasim+WfXBXhbf369XX9NmzY8ODBg0pJL5JkjNvS0hIZL8Je\r
+ZOYYJWJn9tCmAcca7JOrqiTevtz7eKdOnRqxNrvIedTW6P/9v/8XCxABeMaMGZ9//vl4OY4uXrz4\r
+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\r
+zPrevXv19fXRsX79+oULF6a3wVdaqhg4e59f9lX0iSw9Y8aMGzdulC9VtqiRqJuamlKLp+TiumgJ\r
+RfOlvt+mTZvSPVrZZJcvX569M3P37t0pATY3N2crGPNdsGDBgJuxcINXetl1fBVb+86dO/lRYkVi\r
+eSq1JsuvGDxw4EBjY2NsjdWrV5ecM68y1tjc4EqkF6rMGXAfi3F37twZ+8/MmTOPHj26cuXK2N+y\r
+q0jKd7DXXnvt0KFD6dtdu3ZFz8JCbMCgVWWU+Oqdd96Jr2Kxo5zMRsmXFalnHNdRYhw/frxwgvGx\r
+fP+fYAXLs2/VbJj8XLq6ulpaWmLgKHnS5q1Uf+Uf5btv377Yi2KXSw8SrqWwypf5Ei9a6hIvjiMm\r
+QuszGjdnz56NjvgbrbfUc+vWrekZhxcvXoyWRLr6K5vIlClTapn1tWvXoqGTnV6IJmzM69VXXy1p\r
+IOZlU86/u27Dhg1pAQqXas2aNWmAzs7Ojz76qHzK0Y6JYe71i47UGs4m+80332SNm+hIV7vl39jR\r
+29tby1MeB/vOhcJtWL76VSYVDbVY/vv3769fv37t2rV9g3mnw1jb4EqkF6rMGXAfS29IiUMvesbB\r
+eOzYsdjZIrdU2sFOnDixbNmybKdKd65WmnJJ5skvapVyb12/ONwiFMWyZaPky4roGd9GEZflsfIJ\r
+Dnb/Hy8Fy/Bu1cJVi3CbAvP58+dnzZpVpf7KL8PmzZtjjrGds/1nwMKqxjJf4kVLXeLFccRYOboL\r
+zwOUtD7Tqdf4O3v27KwZlx8lNSmycaPpkD+NUN7QSY9HikZJNCCy16r39V/k3NramrVNSxbm7t27\r
+06dPL1/+27dvV1mq6Fn+aM38lPMDPHjwIJ1zzk/217/+dTTF2tvbFy9eXNhqrJ7wh9YwjZZfyWXe\r
+sUmjZ+0N0/xWTe2zwSbesbPBlUgvVJkz4D5WfU8u3MGampq6uroi2GTFy4BTLp9FlVFKdvvCn/+i\r
+5z//8z9HcssfC+UTHNT+Px4LlmffqoV9YsiDBw9GQo5omv+Frrz+qvEdrpX2pRrLfIkXLXWJF8cR\r
+Y+vornKwb9myJWr3CKgLFiw4f/586pkeN1Vpmhs2bMhO7lVvT5Tr7e0tPOHQ1385YnaNa+HUCpdq\r
+UAEs4nc6J5Mf4PDhw9GKeu+999Jlb339V11Gay9rZmWX/g5jwzTmuHPnzvwoO3bsKF/92FwDTure\r
+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\r
+SUVORK5C" />
+</BODY>
+</HTML>
\ No newline at end of file
index 87cd388..d8b9c79 100644 (file)
@@ -34,7 +34,7 @@ public class ElementMapTRKPT extends TreeMap<Date, Element> {
                     Node node5 = nodes4.item(i4);
                     if (node5 != null) {
                         if (node5.getNodeType() == Node.TEXT_NODE) {
-                            Date time = ImportPicture.dfuk.parse(node5.getNodeValue());
+                            Date time = ImportPicture.toUTCDate(node5.getNodeValue());
                             this.put(time, value);
                                return time;
                         }
@@ -155,6 +155,6 @@ public class ElementMapTRKPT extends TreeMap<Date, Element> {
                        }
                        lastTime = new Date(key.getTime());
                }
-               System.out.println(String.format("|                      <trkseg/> |%20s|%20s|", ImportPicture.dfuk.format(firstTime), ImportPicture.dfuk.format(lastTime)));
+               System.out.println(String.format("|                      <trkseg/> |%20s|%20s|", ImportPicture.toUTCString(firstTime), ImportPicture.toUTCString(lastTime)));
     }
 }
index 41fc070..1c2367a 100644 (file)
@@ -2,6 +2,7 @@ package osm.jp.gpx;
 \r
 import java.io.*;\r
 import java.nio.channels.FileChannel;\r
+import java.text.DateFormat;\r
 import java.text.DecimalFormat;\r
 import java.text.ParseException;\r
 import java.text.SimpleDateFormat;\r
@@ -120,6 +121,22 @@ public class ImportPicture extends Thread {
         ImportPicture obj = new ImportPicture();\r
         obj.params = new AppParameters(paramFilePath);\r
 \r
+        System.out.println(" - param: "+ AppParameters.IMG_TIME +"="+ obj.params.getProperty(AppParameters.IMG_TIME) );\r
+        System.out.println(" - param: "+ AppParameters.IMG_BASE_FILE +"="+ obj.params.getProperty(AppParameters.IMG_BASE_FILE) );\r
+        System.out.println(" - param: "+ AppParameters.GPX_BASETIME +"="+ obj.params.getProperty(AppParameters.GPX_BASETIME) );\r
+        System.out.println(" - param: "+ AppParameters.IMG_SOURCE_FOLDER +"="+ obj.params.getProperty(AppParameters.IMG_SOURCE_FOLDER) );\r
+        System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_FOLDER +"="+ obj.params.getProperty(AppParameters.IMG_OUTPUT_FOLDER) );\r
+        System.out.println(" - param: "+ AppParameters.IMG_OUTPUT +"="+ obj.params.getProperty(AppParameters.IMG_OUTPUT));     \r
+        System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_ALL +"="+ obj.param_ImgOutputAll);\r
+        System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_EXIF +"= "+ String.valueOf(obj.exif));\r
+        System.out.println(" - param: "+ AppParameters.GPX_SOURCE_FOLDER +"="+ obj.param_GpxSourceFolder);\r
+        System.out.println(" - param: "+ AppParameters.GPX_OUTPUT_WPT +"="+ obj.param_GpxOutputWpt);\r
+        System.out.println(" - param: "+ AppParameters.GPX_OVERWRITE_MAGVAR +"="+ Complementation.param_GpxOverwriteMagvar);\r
+        System.out.println(" - param: "+ AppParameters.GPX_OUTPUT_SPEED +"="+ Complementation.param_GpxOutputSpeed);\r
+        System.out.println(" - param: "+ AppParameters.GPX_GPXSPLIT +"="+ obj.param_GpxSplit);\r
+        System.out.println(" - param: "+ AppParameters.GPX_NO_FIRST_NODE +"="+ ImportPicture.param_GpxNoFirstNode);        \r
+        System.out.println(" - param: "+ AppParameters.GPX_REUSE +"="+ obj.param_GpxReuse);\r
+\r
         obj.ex = null;\r
         // argv[0] --> AppParameters.IMG_SOURCE_FOLDER に置き換え\r
         obj.imgDir = new File(obj.params.getProperty(AppParameters.IMG_SOURCE_FOLDER));\r
@@ -143,7 +160,8 @@ public class ImportPicture extends Thread {
                 return;\r
             }\r
                String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0];\r
-               long lastModifyTime = (new SimpleDateFormat("yyyy:MM:dd HH:mm:ss")).parse(dateTimeOriginal).getTime();\r
+               System.out.println("[ImportPicture.debug] EXIF Date and Time (orignal) = '"+ dateTimeOriginal +"'");\r
+               long lastModifyTime = ImportPicture.toEXIFDate(dateTimeOriginal).getTime();\r
                imgtime = new Date(lastModifyTime);\r
         }\r
         else {\r
@@ -242,28 +260,9 @@ public class ImportPicture extends Thread {
                obj.exif = true;\r
        }\r
        \r
-        System.out.println(" - param: imgDir = '"+ obj.imgDir.getAbsolutePath() +"'");\r
-        System.out.println(" - param: outDir = '"+ (obj.outDir == null ? "" : obj.outDir.getAbsolutePath()) +"'");\r
-        System.out.println(" - param: gpxDir = '"+ (obj.gpxDir == null ? "" : obj.gpxDir.getAbsolutePath()) +"'");\r
-        System.out.println(" - param: number of gpxFiles = '"+ obj.gpxFiles.size() +"'");\r
-        System.out.println(" - param: "+ AppParameters.GPX_GPXSPLIT +"="+ obj.param_GpxSplit);\r
-        System.out.println(" - param: "+ AppParameters.GPX_NO_FIRST_NODE +"="+ ImportPicture.param_GpxNoFirstNode);        \r
-        System.out.println(" - param: "+ AppParameters.GPX_REUSE +"="+ obj.param_GpxReuse);\r
-        System.out.println(" - param: "+ AppParameters.IMG_TIME +"="+ obj.params.getProperty(AppParameters.IMG_TIME) );\r
-        System.out.println(" - param: "+ AppParameters.IMG_BASE_FILE +"="+ obj.params.getProperty(AppParameters.IMG_BASE_FILE) );\r
-        System.out.println(" - param: "+ AppParameters.GPX_BASETIME +"="+ obj.params.getProperty(AppParameters.GPX_BASETIME) );\r
-        System.out.println(" - param: "+ AppParameters.IMG_OUTPUT +"="+ obj.params.getProperty(AppParameters.IMG_OUTPUT));     \r
-        System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_ALL +"="+ obj.param_ImgOutputAll);\r
-        System.out.println(" - param: "+ AppParameters.IMG_OUTPUT_EXIF +"= "+ String.valueOf(obj.exif));\r
-        System.out.println(" - param: "+ AppParameters.GPX_SOURCE_FOLDER +"="+ obj.param_GpxSourceFolder);\r
-        System.out.println(" - param: "+ AppParameters.GPX_OUTPUT_WPT +"="+ obj.param_GpxOutputWpt);\r
-        System.out.println(" - param: "+ AppParameters.GPX_OVERWRITE_MAGVAR +"="+ Complementation.param_GpxOverwriteMagvar);\r
-        System.out.println(" - param: "+ AppParameters.GPX_OUTPUT_SPEED +"="+ Complementation.param_GpxOutputSpeed);\r
-\r
         String timeStr = obj.params.getProperty(AppParameters.IMG_TIME);\r
         try {\r
-            //dfjp.setTimeZone(TimeZone.getTimeZone("JST"));\r
-            Date t = dfuk.parse(timeStr);\r
+            Date t = toUTCDate(timeStr);\r
             obj.delta = t.getTime() - imgtime.getTime();\r
         }\r
         catch (ParseException e) {\r
@@ -296,8 +295,12 @@ public class ImportPicture extends Thread {
        public String param_GpxSourceFolder = ".";\r
     Document document;\r
        \r
-    public static final String TIME_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ss";\r
-    public static final SimpleDateFormat dfuk = new SimpleDateFormat(TIME_FORMAT_STRING +"'Z'");\r
+    public static final String TIME_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ss'Z'";\r
+    public static final String EXIF_DATE_TIME_FORMAT_STRING = "yyyy:MM:dd HH:mm:ss";\r
+    //public static final SimpleDateFormat DATE_PARSE = new SimpleDateFormat(TIME_FORMAT_STRING +" Z");\r
+    //public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(TIME_FORMAT_STRING);\r
+    //public static final SimpleDateFormat EXIF_DATE_TIME_PARSE = new SimpleDateFormat(EXIF_DATE_TIME_FORMAT_STRING + " Z");\r
+    //public static final SimpleDateFormat EXIF_DATE_TIME_FORMAT = new SimpleDateFormat(EXIF_DATE_TIME_FORMAT_STRING);\r
 \r
     @Override\r
     public void run() {\r
@@ -432,6 +435,7 @@ public class ImportPicture extends Thread {
             \r
             // itime <-- 画像ファイルの撮影時刻\r
             //                 ファイルの更新日時/EXIFの撮影日時\r
+            //Date itime = changeLocalTime2GMT(new Date(image.lastModified()));\r
             Date itime = new Date(image.lastModified());\r
             if (this.exifBase) {\r
                 ImageMetadata meta = Imaging.getMetadata(image);\r
@@ -446,14 +450,14 @@ public class ImportPicture extends Thread {
                     continue;\r
                 }\r
                String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0];\r
-               long lastModifyTime = (new SimpleDateFormat("yyyy:MM:dd HH:mm:ss")).parse(dateTimeOriginal).getTime();\r
-               itime = new Date(lastModifyTime);\r
+               System.out.println("[ImportPicture.debug] EXIF Date and Time (orignal) = '"+ dateTimeOriginal +"'");\r
+               itime = ImportPicture.toEXIFDate(dateTimeOriginal);\r
             }\r
-            System.out.print(String.format("%20s|", dfuk.format(itime)));\r
+            System.out.print(String.format("%20s|", toUTCString(itime)));\r
 \r
             // uktime <-- 画像撮影時刻に対応するGPX時刻(補正日時)\r
-            Date uktime = new Date(itime.getTime() + delta);\r
-            System.out.print(String.format("%20s|", dfuk.format(uktime)));\r
+            Date correctedtime = new Date(itime.getTime() + delta);\r
+            System.out.print(String.format("%20s|", toUTCString(correctedtime)));\r
 \r
                // 時刻uktimeにおける<magver>をtrkptに追加する\r
             String eleStr = "-";\r
@@ -466,13 +470,13 @@ public class ImportPicture extends Thread {
 \r
             for (Map.Entry<Date,ElementMapTRKPT> map : mapTRKSEG.entrySet()) {\r
                ElementMapTRKPT mapTRKPT = map.getValue();\r
-                trkptE = mapTRKPT.getValue(uktime);\r
+                trkptE = mapTRKPT.getValue(correctedtime);\r
                 if (trkptE != null) {\r
                     break;\r
                 }\r
             }\r
             if (trkptE == null) {\r
-                System.out.print(String.format("%-14s %-14s|", "", ""));\r
+                System.out.print(String.format("%-14s|%-14s|", "", ""));\r
                 System.out.println(String.format("%8s|%6s|%6s|", "", "", ""));\r
                 if (!this.param_ImgOutputAll) {\r
                        continue;\r
@@ -494,7 +498,7 @@ public class ImportPicture extends Thread {
                 if (trkptT.speedStr != null) {\r
                        speedStr = new String(trkptT.speedStr);\r
                 }\r
-                System.out.print(String.format("%-14s %-14s|", (new Double(latitude)).toString(), (new Double(longitude)).toString()));\r
+                System.out.print(String.format("%-14s|%-14s|", (new Double(latitude)).toString(), (new Double(longitude)).toString()));\r
                 System.out.println(String.format("%8s|%6s|%6s|", eleStr, magvarStr, speedStr));\r
             }\r
 \r
@@ -523,16 +527,18 @@ public class ImportPicture extends Thread {
                 TiffOutputDirectory exifDir = outputSet.getOrCreateExifDirectory();\r
                 {\r
                     Calendar cal = GregorianCalendar.getInstance();\r
-                    cal.setTime(uktime);\r
+                    cal.setTimeZone(TimeZone.getTimeZone("UTC"));\r
+                    cal.setTime(correctedtime);\r
                     exifDir.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);\r
-                    exifDir.add(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL, new SimpleDateFormat("yyyy:MM:dd HH:mm:ss").format(cal.getTime()));\r
+                    exifDir.add(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL, ImportPicture.toEXIFString(cal.getTime()));\r
                 }\r
 \r
                 //---- EXIF GPS_TIME_STAMP ----\r
                 TiffOutputDirectory gpsDir = outputSet.getOrCreateGPSDirectory();\r
                 {\r
                     Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));\r
-                    cal.setTime(uktime);\r
+                    cal.setTimeZone(TimeZone.getTimeZone("GMT+00"));\r
+                    cal.setTime(correctedtime);\r
                     final String yearStr = yearFormatter.format(cal.get(Calendar.YEAR));\r
                     final String monthStr = monthFormatter.format(cal.get(Calendar.MONTH) + 1);\r
                     final String dayStr = dayFormatter.format(cal.get(Calendar.DAY_OF_MONTH));\r
@@ -765,6 +771,30 @@ public class ImportPicture extends Thread {
 \r
         return wpt;\r
     }\r
+    \r
+    public static String toEXIFString(Date localdate) {\r
+       DateFormat dfUTC = new SimpleDateFormat(EXIF_DATE_TIME_FORMAT_STRING);\r
+       dfUTC.setTimeZone(TimeZone.getTimeZone("UTC"));\r
+       return dfUTC.format(localdate);\r
+    }\r
+    \r
+    public static Date toEXIFDate(String timeStr) throws ParseException {\r
+       DateFormat dfUTC = new SimpleDateFormat(EXIF_DATE_TIME_FORMAT_STRING);\r
+       dfUTC.setTimeZone(TimeZone.getTimeZone("UTC"));\r
+       return dfUTC.parse(timeStr);\r
+    }\r
+       \r
+    public static String toUTCString(Date localdate) {\r
+       DateFormat dfUTC = new SimpleDateFormat(TIME_FORMAT_STRING);\r
+       dfUTC.setTimeZone(TimeZone.getTimeZone("UTC"));\r
+       return dfUTC.format(localdate);\r
+    }\r
+       \r
+    public static Date toUTCDate(String timeStr) throws ParseException {\r
+       DateFormat dfUTC = new SimpleDateFormat(TIME_FORMAT_STRING);\r
+       dfUTC.setTimeZone(TimeZone.getTimeZone("UTC"));\r
+       return dfUTC.parse(timeStr);\r
+    }\r
        \r
     static String getShortPathName(File dir, File iFile) {\r
         String dirPath = dir.getAbsolutePath();\r
index 453adf5..ed509f9 100644 (file)
@@ -68,7 +68,7 @@ public class TagTrkpt {
                     if (node2 != null) {
                         if (node2.getNodeType() == Node.TEXT_NODE) {
                             try {
-                                                               this.time = ImportPicture.dfuk.parse(node2.getNodeValue());
+                                                               this.time = ImportPicture.toUTCDate(node2.getNodeValue());
                                                        } catch (ParseException e) {
                                                                this.time = null;
                                                        }
index 10409d2..9e1a774 100644 (file)
@@ -28,6 +28,9 @@ public class AdjustTime extends JFrame
     public static final String PROGRAM_VARSION = "3.2";
     public static final String PROGRAM_UPDATE = "2017/06/28";
        
+    AppParameters params;
+    SimpleDateFormat dfjp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
+
     // Used for addNotify check.
     boolean fComponentsAdjusted = false;
     
@@ -144,9 +147,6 @@ public class AdjustTime extends JFrame
         }
     }
     
-    AppParameters params;
-    SimpleDateFormat dfjp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
        /**
         * データベース内のテーブルを一覧で表示するFrame
         * @throws IOException 
@@ -619,7 +619,7 @@ public class AdjustTime extends JFrame
         try {
                this.params.setProperty(AppParameters.IMG_SOURCE_FOLDER, arg1_srcFolder.getText());
                this.params.setProperty(AppParameters.IMG_BASE_FILE, arg2_baseTimeImg.getText());
-               this.params.setProperty(AppParameters.IMG_TIME, ImportPicture.dfuk.format(dfjp.parse(arg3_basetime.getText())));
+               this.params.setProperty(AppParameters.IMG_TIME, ImportPicture.toUTCString(dfjp.parse(arg3_basetime.getText())));
                this.params.setProperty(AppParameters.IMG_OUTPUT, String.valueOf(outputIMG.isSelected()));
                this.params.setProperty(AppParameters.IMG_OUTPUT_FOLDER, arg5_outputFolder.getText());
                this.params.setProperty(AppParameters.IMG_OUTPUT_ALL, String.valueOf(outputIMG_all.isSelected()));
index 1e39f28..982a020 100644 (file)
@@ -132,97 +132,97 @@ public class ElementMapTRKPTTest {
 
                @Test
                public void get_17() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:17Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:17Z"));
                        assertThat(ret, is(nullValue()));
                }
 
                @Test
                public void get_18() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:18Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:18Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:18Z"));
                }
 
                @Test
                public void get_19() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:19Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:19Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:18Z"));
                }
 
                @Test
                public void get_20() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:20Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:20Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:18Z"));
                }
 
                @Test
                public void get_21() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:21Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:21Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:21Z"));
                }
 
                @Test
                public void get_22() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:22Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:22Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:21Z"));
                }
 
                @Test
                public void get_23() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:23Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:23Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:21Z"));
                }
 
                @Test
                public void get_24() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:24Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:24Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:24Z"));
                }
 
                @Test
                public void get_25() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:25Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:25Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:24Z"));
                }
 
                @Test
                public void get_26() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:26Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:26Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:24Z"));
                }
 
                @Test
                public void get_27() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:27Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:27Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:27Z"));
                }
 
                @Test
                public void get_28() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:28Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:28Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:27Z"));
                }
 
                @Test
                public void get_30() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:30Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:30Z"));
                        TagTrkpt tag = new TagTrkpt(ret);
                        assertThat(sdf.format(tag.time), is("2017-05-29T01:23:27Z"));
                }
 
                @Test
                public void get_31() throws ParseException {
-                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:31Z"));
+                       Element ret = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:31Z"));
                        assertThat(ret, is(nullValue()));
                }
        }
index ef12b72..d6967d7 100644 (file)
@@ -14,6 +14,11 @@ import java.nio.channels.FileChannel;
 import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
 import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
+import org.apache.commons.imaging.Imaging;
+import org.apache.commons.imaging.common.ImageMetadata;
+import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
+import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
+import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
 import org.junit.runner.*;
 import org.junit.experimental.theories.DataPoints;
 import org.junit.experimental.theories.Theories;
@@ -24,10 +29,14 @@ public class ImportPictureTest {
        static class Expecter {
                String value;
                boolean expect;
+               String timeStr;
+               boolean magver;
                
-               public Expecter(String value, boolean expect){
+               public Expecter(String value, boolean expect, String timeStr, boolean magver){
                        this.value = value;
                        this.expect = expect;
+                       this.timeStr = timeStr;
+                       this.magver = magver;
                }
        }
 
@@ -74,12 +83,12 @@ public class ImportPictureTest {
                                        "testdata/cameradata/20170518.gpx",
                                        "testdata/AdjustTime.20170518.A1.ini",
                                        new Expecter[] {
-                                               new Expecter("10170518/20170518_.gpx", true),
-                                               new Expecter("10170518/DSC05183.JPG", false),
-                                               new Expecter("10170518/DSC05184.JPG", true),
-                                               new Expecter("10170518/DSC05196.JPG", true),
-                                               new Expecter("10170518/DSC05204.JPG", true),
-                                               new Expecter("10170518/DSC05205.JPG", false),
+                                               new Expecter("10170518/20170518_.gpx", true, null, true),
+                                               new Expecter("10170518/DSC05183.JPG", false, null, false),
+                                               new Expecter("10170518/DSC05184.JPG", true, "2017:05:18 00:34:44", true),
+                                               new Expecter("10170518/DSC05196.JPG", true, "2017:05:18 00:37:32", true),
+                                               new Expecter("10170518/DSC05204.JPG", true, "2017:05:18 00:46:48", true),
+                                               new Expecter("10170518/DSC05205.JPG", false, null, false),
                                        }),
                        new Fixture(
                                        "[A2].SONYカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルもコピーする時",
@@ -88,12 +97,12 @@ public class ImportPictureTest {
                                        "testdata/cameradata/20170518.gpx",
                                        "testdata/AdjustTime.20170518.A2.ini",
                                        new Expecter[] {
-                                               new Expecter("10170518/20170518_.gpx", true),
-                                               new Expecter("10170518/DSC05183.JPG", true),
-                                               new Expecter("10170518/DSC05184.JPG", true),
-                                               new Expecter("10170518/DSC05196.JPG", true),
-                                               new Expecter("10170518/DSC05204.JPG", true),
-                                               new Expecter("10170518/DSC05205.JPG", true),
+                                               new Expecter("10170518/20170518_.gpx", true, null, true),
+                                               new Expecter("10170518/DSC05183.JPG", true, "2017:05:18 00:16:48", true),
+                                               new Expecter("10170518/DSC05184.JPG", true, "2017:05:18 00:34:44", true),
+                                               new Expecter("10170518/DSC05196.JPG", true, "2017:05:18 00:37:32", true),
+                                               new Expecter("10170518/DSC05204.JPG", true, "2017:05:18 00:46:48", true),
+                                               new Expecter("10170518/DSC05205.JPG", true, "2017:05:18 00:48:04", true),
                                        }),
                        
                        new Fixture(
@@ -103,11 +112,11 @@ public class ImportPictureTest {
                                        "testdata/cameradata/20170518.gpx",
                                        "testdata/AdjustTime.20170518.B1.ini",
                                        new Expecter[] {
-                                               new Expecter("cameradata/20170518_.gpx", true),
-                                               new Expecter("cameradata/20170518_092031A.jpg", false),
-                                               new Expecter("cameradata/20170518_094226A_snap.jpg", true),
-                                               new Expecter("cameradata/20170518_094737A.jpg", true),
-                                               new Expecter("cameradata/20170518_094827A.jpg", false),
+                                               new Expecter("cameradata/20170518_.gpx", true, null, true),
+                                               new Expecter("cameradata/20170518_092031A.jpg", false, null, false),
+                                               new Expecter("cameradata/20170518_094226A_snap.jpg", true, "2017:05:18 00:42:26", true),
+                                               new Expecter("cameradata/20170518_094737A.jpg", true, "2017:05:18 00:47:36", true),
+                                               new Expecter("cameradata/20170518_094827A.jpg", false, null, false),
                                        }),
 
                        new Fixture(
@@ -117,11 +126,11 @@ public class ImportPictureTest {
                                        "testdata/cameradata/20170518.gpx",
                                        "testdata/AdjustTime.20170518.B2.ini",
                                        new Expecter[] {
-                                               new Expecter("cameradata/20170518_.gpx", true),
-                                               new Expecter("cameradata/20170518_092031A.jpg", true),
-                                               new Expecter("cameradata/20170518_094226A_snap.jpg", true),
-                                               new Expecter("cameradata/20170518_094737A.jpg", true),
-                                               new Expecter("cameradata/20170518_094827A.jpg", true),
+                                               new Expecter("cameradata/20170518_.gpx", true, null, true),
+                                               new Expecter("cameradata/20170518_092031A.jpg", true, "2017:05:18 00:20:30", true),
+                                               new Expecter("cameradata/20170518_094226A_snap.jpg", true, "2017:05:18 00:42:26", true),
+                                               new Expecter("cameradata/20170518_094737A.jpg", true, "2017:05:18 00:47:36", true),
+                                               new Expecter("cameradata/20170518_094827A.jpg", true, "2017:05:18 00:48:26", true),
                                        }),
                        
                        new Fixture(
@@ -132,32 +141,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M1a.separate.ini",
                                        new Expecter[] {
                                        // GPX file
-                                               new Expecter("separate/separate_.gpx", true),
+                                               new Expecter("separate/separate_.gpx", true, null, true),
                                    
-                                   // out of time ( - 2017-05-29T01:24:05)
-                                               new Expecter("separate/20170529_102305A.jpg", false),
-                                               new Expecter("separate/20170529_102314A.jpg", false),
+                                   // out of time ( - 2017-05-29T01:23:18)
+                                               new Expecter("separate/20170529_102305A.jpg", false, null, false),
+                                               new Expecter("separate/20170529_102314A.jpg", false, null, false),
                                    
-                                   // in TRKSEG(1) (2017-05-29T01:23:05 - 2017-05-29T01:24:05)
-                                               new Expecter("separate/20170529_102318A.jpg", true),
-                                               new Expecter("separate/20170529_102322A.jpg", true),
-                                               new Expecter("separate/20170529_102405A.jpg", true),
+                                   // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+                                               new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                               new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                               new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                    // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                               new Expecter("separate/20170529_102409A.jpg", false),
-                                               new Expecter("separate/20170529_102418A.jpg", false),
+                                               new Expecter("separate/20170529_102409A.jpg", false, null, false),
+                                               new Expecter("separate/20170529_102418A.jpg", false, null, false),
 
                                    // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                               new Expecter("separate/20170529_102448A.jpg", true),
-                                               new Expecter("separate/20170529_103246A.jpg", true),
+                                               new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                               new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                    // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                               new Expecter("separate/20170529_103315A.jpg", false),
-                                               new Expecter("separate/20170529_103545A.jpg", false),
+                                               new Expecter("separate/20170529_103315A.jpg", false, null, false),
+                                               new Expecter("separate/20170529_103545A.jpg", false, null, false),
 
                                    // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                               new Expecter("separate/20170529_102448A.jpg", true),
-                                               new Expecter("separate/20170529_103246A.jpg", true),
+                                               new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                               new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -168,32 +177,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M1b.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", true),
-                                                       new Expecter("separate/20170529_102314A.jpg", true),
+                                                       new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 01:23:06", true),
+                                                       new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 01:23:14", true),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", true),
-                                                       new Expecter("separate/20170529_102418A.jpg", true),
+                                                       new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 01:24:10",true),
+                                                       new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 01:24:18",true),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", true),
-                                                       new Expecter("separate/20170529_103545A.jpg", true),
+                                                       new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 01:33:14",true),
+                                                       new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45",true),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -204,32 +213,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M1c.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", false),
-                                                       new Expecter("separate/20170529_102314A.jpg", false),
+                                                       new Expecter("separate/20170529_102305A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102314A.jpg", false, null, false),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", false),
-                                                       new Expecter("separate/20170529_102418A.jpg", false),
+                                                       new Expecter("separate/20170529_102409A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102418A.jpg", false, null, false),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", false),
-                                                       new Expecter("separate/20170529_103545A.jpg", false),
+                                                       new Expecter("separate/20170529_103315A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_103545A.jpg", false, null, false),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -240,32 +249,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M1d.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", true),
-                                                       new Expecter("separate/20170529_102314A.jpg", true),
+                                                       new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 01:23:06", true),
+                                                       new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 01:23:14", true),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", true),
-                                                       new Expecter("separate/20170529_102418A.jpg", true),
+                                                       new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 01:24:10",true),
+                                                       new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 01:24:18",true),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", true),
-                                                       new Expecter("separate/20170529_103545A.jpg", true),
+                                                       new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 01:33:14",true),
+                                                       new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 01:35:44",true),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        
@@ -277,32 +286,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M2a.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", false),
-                                                       new Expecter("separate/20170529_102314A.jpg", false),
+                                                       new Expecter("separate/20170529_102305A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102314A.jpg", false, null, false),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", false),
-                                                       new Expecter("separate/20170529_102418A.jpg", false),
+                                                       new Expecter("separate/20170529_102409A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102418A.jpg", false, null, false),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", false),
-                                                       new Expecter("separate/20170529_103545A.jpg", false),
+                                                       new Expecter("separate/20170529_103315A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_103545A.jpg", false, null, false),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -313,32 +322,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M2b.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", true),
-                                                       new Expecter("separate/20170529_102314A.jpg", true),
+                                                       new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 01:23:06", true),
+                                                       new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 01:23:14", true),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", true),
-                                                       new Expecter("separate/20170529_102418A.jpg", true),
+                                                       new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 01:24:10",true),
+                                                       new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 01:24:18",true),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", true),
-                                                       new Expecter("separate/20170529_103545A.jpg", true),
+                                                       new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 01:33:14",true),
+                                                       new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 01:35:44",true),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -349,32 +358,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M2c.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", false),
-                                                       new Expecter("separate/20170529_102314A.jpg", false),
+                                                       new Expecter("separate/20170529_102305A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102314A.jpg", false, null, false),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", false),
-                                                       new Expecter("separate/20170529_102418A.jpg", false),
+                                                       new Expecter("separate/20170529_102409A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102418A.jpg", false, null, false),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", false),
-                                                       new Expecter("separate/20170529_103545A.jpg", false),
+                                                       new Expecter("separate/20170529_103315A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_103545A.jpg", false, null, false),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -385,32 +394,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M2d.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", true),
-                                                       new Expecter("separate/20170529_102314A.jpg", true),
+                                                       new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 01:23:06", true),
+                                                       new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 01:23:14", true),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", true),
-                                                       new Expecter("separate/20170529_102418A.jpg", true),
+                                                       new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 01:24:10",true),
+                                                       new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 01:24:18",true),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", true),
-                                                       new Expecter("separate/20170529_103545A.jpg", true),
+                                                       new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 01:33:14",true),
+                                                       new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 01:35:44",true),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
                        
                        new Fixture(
@@ -421,32 +430,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M2a.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", false),
-                                                       new Expecter("separate/20170529_102314A.jpg", false),
+                                                       new Expecter("separate/20170529_102305A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102314A.jpg", false, null, false),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", false),
-                                                       new Expecter("separate/20170529_102418A.jpg", false),
+                                                       new Expecter("separate/20170529_102409A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102418A.jpg", false, null, false),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", false),
-                                                       new Expecter("separate/20170529_103545A.jpg", false),
+                                                       new Expecter("separate/20170529_103315A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_103545A.jpg", false, null, false),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -457,32 +466,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M2b.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
-                                           
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
+
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", true),
-                                                       new Expecter("separate/20170529_102314A.jpg", true),
+                                                       new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 01:23:06", true),
+                                                       new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 01:23:14", true),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", true),
-                                                       new Expecter("separate/20170529_102418A.jpg", true),
+                                                       new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 01:24:10",true),
+                                                       new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 01:24:18",true),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", true),
-                                                       new Expecter("separate/20170529_103545A.jpg", true),
+                                                       new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 01:33:14",true),
+                                                       new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 01:35:44",true),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -493,32 +502,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M2c.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", false),
-                                                       new Expecter("separate/20170529_102314A.jpg", false),
+                                                       new Expecter("separate/20170529_102305A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102314A.jpg", false, null, false),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", false),
-                                                       new Expecter("separate/20170529_102418A.jpg", false),
+                                                       new Expecter("separate/20170529_102409A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_102418A.jpg", false, null, false),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", false),
-                                                       new Expecter("separate/20170529_103545A.jpg", false),
+                                                       new Expecter("separate/20170529_103315A.jpg", false, null, false),
+                                                       new Expecter("separate/20170529_103545A.jpg", false, null, false),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
 
                        new Fixture(
@@ -529,32 +538,32 @@ public class ImportPictureTest {
                                        "testdata/AdjustTime.M2d.separate.ini",
                                        new Expecter[] {
                                                // GPX file
-                                                       new Expecter("separate/separate_.gpx", true),
+                                                       new Expecter("separate/separate_.gpx", true, null, true),
                                            
                                            // out of time ( - 2017-05-29T01:23:18)
-                                                       new Expecter("separate/20170529_102305A.jpg", true),
-                                                       new Expecter("separate/20170529_102314A.jpg", true),
+                                                       new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 01:23:06", true),
+                                                       new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 01:23:14", true),
                                            
                                            // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
-                                                       new Expecter("separate/20170529_102318A.jpg", true),
-                                                       new Expecter("separate/20170529_102322A.jpg", true),
-                                                       new Expecter("separate/20170529_102405A.jpg", true),
+                                                       new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 01:23:18",true),
+                                                       new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 01:23:22",true),
+                                                       new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 01:24:04",true),
 
                                            // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
-                                                       new Expecter("separate/20170529_102409A.jpg", true),
-                                                       new Expecter("separate/20170529_102418A.jpg", true),
+                                                       new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 01:24:10",true),
+                                                       new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 01:24:18",true),
 
                                            // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 01:24:48",true),
+                                                       new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 01:32:46",true),
 
                                            // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
-                                                       new Expecter("separate/20170529_103315A.jpg", true),
-                                                       new Expecter("separate/20170529_103545A.jpg", true),
+                                                       new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 01:33:14",true),
+                                                       new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 01:35:44",true),
 
                                            // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
-                                                       new Expecter("separate/20170529_102448A.jpg", true),
-                                                       new Expecter("separate/20170529_103246A.jpg", true),
+                                                       new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 01:36:14",true),
+                                                       new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 01:41:18",true),
                                        }),
        };
 
@@ -563,6 +572,7 @@ public class ImportPictureTest {
        public void パラメータテスト(Fixture dataset) throws Exception {
                ImportPictureTest.setup(dataset);
                ImportPictureTest.testdo(dataset.iniFilePath);
+               //SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss", Locale.UK);
                
                Expecter[] es = dataset.expecters;
                AppParameters params = new AppParameters(dataset.iniFilePath);
@@ -571,6 +581,25 @@ public class ImportPictureTest {
                File file = new File(outDir, es[i].value);
                System.out.println("[JUnit.debug] assert file='"+ file.getAbsolutePath() +"'");
                assertThat(file.exists(), is(es[i].expect));
+               if (es[i].timeStr != null) {
+                       // JPEG メタデータが存在すること
+                ImageMetadata meta = Imaging.getMetadata(file);
+                
+                // メタデータは インスタンスJpegImageMetadata であること
+               assertThat((meta instanceof JpegImageMetadata), is(true));
+                
+                JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;
+                assertNotNull(jpegMetadata);
+                
+                // EXIFデータが存在すること
+                TiffImageMetadata exif = jpegMetadata.getExif();
+                assertNotNull(exif);
+                
+                // EXIF-TIME が正しく設定されていること
+               String exifTime = ImportPicture.toEXIFString(ImportPicture.toEXIFDate(exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0]));
+               System.out.println("[debug] exifTime = '"+ exifTime +"'");
+               assertThat(exifTime, is(es[i].timeStr));
+               }
                }
        }