我需要帮助来解决夏令时的问题。
应用工作流:
的最大平均值。
将来python总是每5分钟读取一次值,但是会将值存储在本地db中,并且每30分钟同步一次值,这样我就不会因为internet连接丢失而丢失值,所以我添加了“同步时间”,以查看发生了什么和是否发生。
工件的问题:
我的命令组每天将数据库中的所有行:
$weatherdata = rawData::all()
->groupBy(function (RawData $item) {
return $item->acktime->format('Y-m-d');
})
->each(function (Collection $day) {
foreach ($day as $value){
Log::info($value);
}
Log::info('NEXT DAY');
});它看起来很有效,,但是阅读了日志,我得到了这个问题
{"acktime":"2021-10-30T22:56:45.000000Z",
NEXT DAY
{"acktime":"2021-10-30T23:01:47.000000Z",对他来说,在法律时间里,这一天是在一小时前结束的,而这并不是唯一的问题。
如果我将行分组为几个小时而不是一天:
NEXT HOUR
{"acktime":"2021-10-31T02:02:54.000000Z","temperatur..."}
..other 23 values when hour is 2 (not ok,total is 24 values)
NEXT HOUR
{"acktime":"2021-10-31T03:03:58.000000Z","temperatur..."}
..other 11 values (it's ok,total should be maximum 12)
NEXT HOUR它把我分组为2:00-3:00,就好像我们只活了一次,但在房地产里,我们做了两次2:00-3:00 .,所以我想:
NEXT HOUR
{"acktime":"2021-10-31T02:02:54.000000Z","temperatur..."}
..other 11 value (it's ok,total 12)
NEXT HOUR
{"acktime":"2021-10-31T03:03:58.000000Z","temperatur..."}
..other 11 value (it's ok,total 12)
NEXT HOUR
{"acktime":"2021-10-31T02:02:54.000000Z","temperatur.."}
..other 11 value (it's ok,total 12)我的app.php设置为:
'timezone' => 'Europe/London',我的模特班:
class rawData extends Model
{
use HasFactory;
protected $fillable = [
'acktime',
'temperature',
'humidity',
..other data..
'synctime'
];
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = ['acktime','synctime'];
public $timestamps = false;
}注意:我昨天刚将acktime和synctime添加为受保护的$dates。
Python脚本:
在读取传感器值之后,python脚本将值直接发送到我的api,但问题可能是如何获得它的数据时间:
from datetime import datetime
def writeData(data):
data['acktime'] = datetime.now()
http postMySql configuration acktime和synctime是datatime类型,UTC is +1运行SHOW GLOBAL VARIABLES LIKE 'time_zone';我不知道如何将get时区存储在datatime行中
最终问题
我将来如何避免这个问题呢?如何恢复已存储的数据时间值??
发布于 2021-11-29 10:35:22
我找到的唯一办法就是把时间当作UTC。
UTC的时间不受白天节省时间的影响,这样我就没有订货问题。
因此,第一步是将Lavarvel时区设置为UTC:
config>app.php
'timezone' => 'UTC',这是一种很好的方法,但是如果您需要使用UTC::now (),您必须提醒现在将在服务器时区服务,所以您需要"UTC“现在的日期时间!
Carbon::now('UTC')使用UTC作为基准时间,引入另一个“问题”,但问题有解决方案:
做每日报告我不能直接使用Carbon startofDay() end endofDay()函数,但是我需要用本地时区创建一个日期,得到一天的开始和结束,然后将每个日期转换为UTC时区:
$day = new Carbon($SingleDay);
$day->setTimezone('Europe/Rome');
$startTime = $day->copy()->startOfDay();
$endTime = $day->copy()->endOfDay();
$startTime->setTimezone('UTC');
$endTime->setTimezone('UTC');并且修改了phyton脚本olso,修改了用于存储数据的UTCnow日期时间。
datetime.utcnow()为了从db恢复数据,我执行了一个查询,从一天中删除一两个小时,这是一项简短的工作,帮助我恢复所有数据。
https://stackoverflow.com/questions/69911838
复制相似问题