Mysql 颤振更改从后端接收的时间

Mysql 颤振更改从后端接收的时间,mysql,node.js,date,flutter,Mysql,Node.js,Date,Flutter,当我从后端发送日期时,它有一个格式,但当我在flutter中得到它时,格式和时间会发生变化 我使用flatter作为前端,nodeJS作为后端,MYSQL作为数据库。 在我的后端,我有以下代码 var req_date = moment (Date.now ()). tz ('America / Mexico_City'). format ('YYYY-MM-DD HH: mm: ss'); 然后我将它作为时间戳保存到我的MSQL数据库中,在我的数据库中,它如下所示 2020-08-2

当我从后端发送日期时,它有一个格式,但当我在flutter中得到它时,格式和时间会发生变化

我使用flatter作为前端,nodeJS作为后端,MYSQL作为数据库。 在我的后端,我有以下代码

    var req_date = moment (Date.now ()). tz ('America / Mexico_City'). format ('YYYY-MM-DD HH: mm: ss');
然后我将它作为时间戳保存到我的MSQL数据库中,在我的数据库中,它如下所示

2020-08-22 03:02:53
因此,我从Flatter向我的api发出一个请求,然后接收它并向我的数据库发送一个请求,该数据库返回以下结果

Sat, August 22, 2020 03:02:53 GMT-0500 (GMT-05: 00)
然后我将其作为JSON发送,并在flutter中接收

但当我在颤振上打印时。我的颤振控制台向我展示了以下内容

Requested_date: 2020-08-22T08: 02: 53.000Z
问题是在我的后端的时间是3:02,但当我收到它在颤振它是8:02。
我认为这与UTC时区有关,但我不知道如何解决它,因为我想获得与后端相同的时间。

我终于能够解决我的问题

我的解决办法如下: 我首先接受bd请求并将其修改为ISO8601格式,并将其转换为字符串,然后将其发送到Flatter。 然后,当我在颤振上收到它时,我能够捕获响应并显示它

1。转换为ISO 8601。

我首先向我的数据库发出请求,并将结果转换为ISO860

var reqDateIsoString = new Date(bdRequest[0][i].date).toISOString();
2。提供本地格式

我没有使用toLocale方法,因为我不想更改相对于服务器的日期,因为我的目标是显示历史,所以我必须将其作为常量处理。所以我使用nodeJS的“时刻”库

npm install moment
var moment = require('moment');
var reqDateWithFormat = moment(reqDateIsoString).format('YYYY-MM-DDTHH:mm:ss');
3。转换为字符串。

作为最后一步,我将数据转换为字符串以防止颤振将时间更改为UTC

var reqDateString = String (reqDateWithFormat);
然后我将它发送到flifter,并能够根据需要将日期显示为字符串


多亏了

这是同一时间,只是在不同的时区。03:02墨西哥城是08:02祖鲁/UTC(注意Dart打印的Z后缀)。Dart仅在本地时区(由移动设备或浏览器定义)或UTC中处理时间,并允许您轻松地在两者之间转换。有一个名为
timezone
的软件包,可以将时间转换为任意时区。