3

我使用带有小部件“float_time”的浮点字段来显示时间。如何将日期时间转换为浮动以在小部件中正确显示?

我再解释一下我的情况,

我有一个字段字段'start_date',它是日期时间,我希望在“on_change”事件中我在另一个具有小部件“float_time”的float类型字段中设置时间值。

 'start_date': fields.datetime('Fecha Inicio' , required = True),
 'h_inicio': fields.float('Hora inicio', help="Hora inicio" , required = True),

鉴于:

<field name="start_date" on_change="onchange_f_inicio(start_date)"/>
<field name="h_inicio" widget="float_time"/>

方法 on_change

    def onchange_f_inicio(self, cr, uid, ids ,fecha_inicio):
        res = {'value':{}}
        fecha_ini = datetime.strptime(fecha_inicio, "%Y-%m-%d %H:%M:%S")

       user = self.pool.get('res.users').browse(cr, uid, uid)
       tz = pytz.timezone(user.tz) if user.tz else pytz.utc
       fecha_ini = pytz.utc.localize(fecha_ini).astimezone(tz)     # convert start in user's timezone           

        hora_inicio = "%s.%s" % (str(fecha_ini.hour) , str(fecha_ini.minute))       
        res['value']['h_inicio'] =  round(float(hora_inicio),1)

    return res

唯一可行的方法是将日期“start_date”转换为字符串,然后转换为浮点数,作为 on_change 方法返回的值。

这种形式并不认为它是最好的,如果我能帮助创造一个更好的方式来感谢你。

谢谢

4

1 回答 1

1

您拥有的代码很好,除了一个小错误:

hora_inicio = "%s.%s" % (str(fecha_ini.hour) , str(fecha_ini.minute))

应该

hora_inicio = "%s.%s" % (str(fecha_ini.hour) , str(fecha_ini.minute // 60))

所以30分钟= 0.5(而不是0.3

于 2013-11-20T18:43:36.490 回答