diff --git a/x2-data-lib/src/main/java/com/github/rcd47/x2data/lib/savegame/X2SaveGameReader.java b/x2-data-lib/src/main/java/com/github/rcd47/x2data/lib/savegame/X2SaveGameReader.java index e3011b6..1158cff 100644 --- a/x2-data-lib/src/main/java/com/github/rcd47/x2data/lib/savegame/X2SaveGameReader.java +++ b/x2-data-lib/src/main/java/com/github/rcd47/x2data/lib/savegame/X2SaveGameReader.java @@ -125,7 +125,7 @@ public X2SaveGameHeader readHeader(FileChannel in) throws IOException { header.campaignNumber = buffer.getInt(); header.saveSlot = buffer.getInt(); header.description = UnrealUtils.readString(buffer); - header.creationTime = LocalDateTime.parse(UnrealUtils.readString(buffer), DateTimeFormatter.ofPattern("M/d/y\nH:mm")); + var creationTimeString = UnrealUtils.readString(buffer); header.mapCommand = UnrealUtils.readString(buffer); header.tacticalSave = buffer.getInt() == 1; header.ironmanEnabled = buffer.getInt() == 1; @@ -136,6 +136,11 @@ public X2SaveGameHeader readHeader(FileChannel in) throws IOException { header.campaignStartTime = LocalDateTime.parse(UnrealUtils.readString(buffer), DateTimeFormatter.ofPattern("yyyy.MM.dd-HH.mm.ss")); header.mapImage = UnrealUtils.readString(buffer); header.name = UnrealUtils.readString(buffer); + + // creation time has different format depending on locale + header.creationTime = LocalDateTime.parse( + creationTimeString, + DateTimeFormatter.ofPattern("CHN".equals(header.language) ? "y M d\nH:mm" : "M/d/y\nH:mm")); int dlcCount = buffer.getInt(); header.installedDlcAndMods = new ArrayList<>(dlcCount); diff --git a/x2-data-lib/src/test/resources/savegame/chinese-datetime.sav b/x2-data-lib/src/test/resources/savegame/chinese-datetime.sav new file mode 100644 index 0000000..bf426c9 Binary files /dev/null and b/x2-data-lib/src/test/resources/savegame/chinese-datetime.sav differ