我正在尝试调用一个API,其主体包含JST时区的ISO8601字符串。
首先,我有一个这个对象的示例:
class SearchUser {
final String firstName;
final String lastName;
final DateTime birthday;
... // constructor
Map<String, dynamic> toJson() => {
"firstName" : firstName,
"lastName" : lastName,
"birthday" : birthday.toLocal().toIso8601String()
};
}
我使用上面写的toJson
方法在这个API中将其编码为json:
class userApi {
Future<dynamic> searchUser(SearchUser searchUser) async {
final url = Uri.parse('$baseUrl/user/search');
try {
final Map<String, String> headers = {"content-type" : "application/json"};
final body = jsonEncode(searchUser.toJson());
final res = await http.post(url, headers : headers, body : body);
...
}
}
}
然后,举个例子,假设我为body
设置了这个值:{"birthday":"2023-02-21T00:00:00.000","firstName":"John","lastName":"White"}
.
但是,在我的后端(用TypeScript编写)中,new Date(body.birthday)
的输出将如下所示:
2023-02-20T15:00:00.000Z
我该怎么做才能消除这个差距?
1条答案
按热度按时间7kqas0il1#
2023年2月21日00:00 JST * 为 * 2023年2月20日15:00 UTC,没有间隔;这是同一时刻的两种表示。
您的服务器似乎以UTC存储时间。当您的客户端发送本地时间“2023-02-21 00:00 JST”时,如果您希望您的服务器存储“2023-02-21 00:00 UTC”并且不执行任何时区转换,那么您的客户端应该首先发送一个UTC时间以及您想要的年/月/日等值。Dart 2.19添加了一个
copyWith
extension method onDateTime
,使之更容易:相反,当您从服务器获取UTC时间时,可以将其视为本地时间,而无需使用以下命令执行时区转换: