diff --git a/lib/src/minio_models.dart b/lib/src/minio_models.dart
index 3b9cc581d7881697616207429e22a7d5230c4770..801ca1d9a2181dd4e357d1c1435c9322c7663a30 100644
--- a/lib/src/minio_models.dart
+++ b/lib/src/minio_models.dart
@@ -1,5 +1,6 @@
 import 'package:minio/models.dart';
 import 'package:minio/src/minio_errors.dart';
+import 'package:minio/src/utils.dart';
 import 'package:xml/xml.dart';
 
 import '../models.dart';
@@ -91,11 +92,11 @@ class CopyConditions {
   String? matchETagExcept;
 
   void setModified(DateTime date) {
-    modified = date.toUtc().toIso8601String();
+    modified = toRfc7231Time(date.toUtc());
   }
 
   void setUnmodified(DateTime date) {
-    unmodified = date.toUtc().toIso8601String();
+    unmodified = toRfc7231Time(date.toUtc());
   }
 
   void setMatchETag(String etag) {
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 8ae8e007fd56362331c01a58e4dd4e391b1d757e..67fdde0a034b4aa6020ac22491cf68a833728dee 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -91,8 +91,15 @@ String trimDoubleQuote(String str) {
 }
 
 DateTime parseRfc7231Time(String time) {
-  final format = DateFormat('EEE, dd MMM yyyy hh:mm:ss zzz');
-  return format.parse(time);
+  final format = DateFormat('EEE, dd MMM yyyy HH:mm:ss');
+  final isUtc = time.endsWith('GMT');
+  return format.parse(time, isUtc);
+}
+
+String toRfc7231Time(DateTime time) {
+  final format = DateFormat('EEE, dd MMM yyyy HH:mm:ss');
+  final result = format.format(time);
+  return time.isUtc ? result + ' GMT' : result;
 }
 
 List<List<T>> groupList<T>(List<T> list, int maxMembers) {