Skip to content

Commit 6083154

Browse files
committed
Fixed timezone shifting
1 parent 270227c commit 6083154

2 files changed

Lines changed: 21 additions & 21 deletions

File tree

ICSharpCode.SharpZipLib/Zip/ZipEntry.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,7 +1058,7 @@ internal void ProcessExtraData(bool localHeader)
10581058
long lastAccess = extraData.ReadLong();
10591059
long createTime = extraData.ReadLong();
10601060

1061-
DateTime = System.DateTime.FromFileTime(lastModification);
1061+
DateTime = System.DateTime.FromFileTimeUtc(lastModification);
10621062
}
10631063
break;
10641064
} else {
@@ -1075,8 +1075,8 @@ internal void ProcessExtraData(bool localHeader)
10751075
if (((flags & 1) != 0) && (length >= 5)) {
10761076
int iTime = extraData.ReadInt();
10771077

1078-
DateTime = (new System.DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
1079-
new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
1078+
DateTime = (new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc ) +
1079+
new TimeSpan(0, 0, 0, iTime, 0));
10801080
}
10811081
}
10821082
if (method == CompressionMethod.WinZipAES) {

ICSharpCode.SharpZipLib/Zip/ZipExtraData.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -193,22 +193,22 @@ public void SetData(byte[] data, int index, int count)
193193
if (((_flags & Flags.ModificationTime) != 0) && (count >= 5)) {
194194
int iTime = helperStream.ReadLEInt();
195195

196-
_modificationTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
197-
new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
196+
_modificationTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) +
197+
new TimeSpan(0, 0, 0, iTime, 0);
198198
}
199199

200200
if ((_flags & Flags.AccessTime) != 0) {
201201
int iTime = helperStream.ReadLEInt();
202202

203-
_lastAccessTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
204-
new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
203+
_lastAccessTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) +
204+
new TimeSpan(0, 0, 0, iTime, 0);
205205
}
206206

207207
if ((_flags & Flags.CreateTime) != 0) {
208208
int iTime = helperStream.ReadLEInt();
209209

210-
_createTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() +
211-
new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime();
210+
_createTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) +
211+
new TimeSpan(0, 0, 0, iTime, 0);
212212
}
213213
}
214214
}
@@ -224,17 +224,17 @@ public byte[] GetData()
224224
helperStream.IsStreamOwner = false;
225225
helperStream.WriteByte((byte)_flags); // Flags
226226
if ((_flags & Flags.ModificationTime) != 0) {
227-
TimeSpan span = _modificationTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
227+
TimeSpan span = _modificationTime - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
228228
var seconds = (int)span.TotalSeconds;
229229
helperStream.WriteLEInt(seconds);
230230
}
231231
if ((_flags & Flags.AccessTime) != 0) {
232-
TimeSpan span = _lastAccessTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
232+
TimeSpan span = _lastAccessTime - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
233233
var seconds = (int)span.TotalSeconds;
234234
helperStream.WriteLEInt(seconds);
235235
}
236236
if ((_flags & Flags.CreateTime) != 0) {
237-
TimeSpan span = _createTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime();
237+
TimeSpan span = _createTime - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
238238
var seconds = (int)span.TotalSeconds;
239239
helperStream.WriteLEInt(seconds);
240240
}
@@ -365,13 +365,13 @@ public void SetData(byte[] data, int index, int count)
365365
if (ntfsTag == 1) {
366366
if (ntfsLength >= 24) {
367367
long lastModificationTicks = helperStream.ReadLELong();
368-
_lastModificationTime = DateTime.FromFileTime(lastModificationTicks);
368+
_lastModificationTime = DateTime.FromFileTimeUtc(lastModificationTicks);
369369

370370
long lastAccessTicks = helperStream.ReadLELong();
371-
_lastAccessTime = DateTime.FromFileTime(lastAccessTicks);
371+
_lastAccessTime = DateTime.FromFileTimeUtc(lastAccessTicks);
372372

373373
long createTimeTicks = helperStream.ReadLELong();
374-
_createTime = DateTime.FromFileTime(createTimeTicks);
374+
_createTime = DateTime.FromFileTimeUtc(createTimeTicks);
375375
}
376376
break;
377377
} else {
@@ -394,9 +394,9 @@ public byte[] GetData()
394394
helperStream.WriteLEInt(0); // Reserved
395395
helperStream.WriteLEShort(1); // Tag
396396
helperStream.WriteLEShort(24); // Length = 3 x 8.
397-
helperStream.WriteLELong(_lastModificationTime.ToFileTime());
398-
helperStream.WriteLELong(_lastAccessTime.ToFileTime());
399-
helperStream.WriteLELong(_createTime.ToFileTime());
397+
helperStream.WriteLELong(_lastModificationTime.ToFileTimeUtc());
398+
helperStream.WriteLELong(_lastAccessTime.ToFileTimeUtc());
399+
helperStream.WriteLELong(_createTime.ToFileTimeUtc());
400400
return ms.ToArray();
401401
}
402402
}
@@ -469,9 +469,9 @@ public DateTime LastAccessTime
469469
}
470470

471471
#region Instance Fields
472-
DateTime _lastAccessTime = DateTime.FromFileTime(0);
473-
DateTime _lastModificationTime = DateTime.FromFileTime(0);
474-
DateTime _createTime = DateTime.FromFileTime(0);
472+
DateTime _lastAccessTime = DateTime.FromFileTimeUtc(0);
473+
DateTime _lastModificationTime = DateTime.FromFileTimeUtc(0);
474+
DateTime _createTime = DateTime.FromFileTimeUtc(0);
475475
#endregion
476476
}
477477

0 commit comments

Comments
 (0)