Symfony-JMS序列化程序-序列化时将日期时间转换为特定时区

Symfony-JMS序列化程序-序列化时将日期时间转换为特定时区,symfony,datetime,timezone,jmsserializerbundle,Symfony,Datetime,Timezone,Jmsserializerbundle,我有一个存储日期时间的实体,我使用JMSSerializer通过API返回此字段: /** *@ORM\Columntype=datetime * *@Serializer\TypeDateTime */ 私人$creationDateTime; creationDateTime与UTC时区一起存储到数据库中 更改格式正确地应用于JSON API响应,例如,将d/m H:i替换为d/m/Y H:i,但返回的时间始终是存储的UTC时间,而不是预期的欧洲/巴黎时间,即使我设置了完全不同的时区 例如,

我有一个存储日期时间的实体,我使用JMSSerializer通过API返回此字段:

/** *@ORM\Columntype=datetime * *@Serializer\TypeDateTime */ 私人$creationDateTime; creationDateTime与UTC时区一起存储到数据库中

更改格式正确地应用于JSON API响应,例如,将d/m H:i替换为d/m/Y H:i,但返回的时间始终是存储的UTC时间,而不是预期的欧洲/巴黎时间,即使我设置了完全不同的时区

例如,如果存储的时间是15:04,则API返回的序列化时间仍然是15:04 UTC,而不是预期的16:04(欧洲/巴黎)

序列化响应时,是否有方法在存储的日期上应用时区

提前谢谢

我使用: Symfony 4、JMS序列化程序bundle 3.1.0、JMS序列化程序2.1.0

编辑:

下面是我做的一次绕圈子,但肯定不是解决这个问题的最佳方法:

/**
 * Returns the signal creation date and time
 *
 * @Serializer\Type(
 *     "DateTime<'d/m/Y H:i'>"
 * )
 *
 * @Serializer\Groups({"signals"})
 * @Serializer\VirtualProperty()
 * @Serializer\Expose
 */
public function getCreationDateTime(): \DateTime
{
    $dateTime = $this->creationDateTime;
    $dateTime->setTimeZone(new \DateTimeZone("Europe/Paris"));

    return $dateTime;
}

使其全球化的最佳方法是在以下位置进行配置:

配置>包>jms_serializer.yaml

像这样:

jms_serializer:
    handlers:
        datetime:
            default_format: "Y-m-d\\TH:i:sP" # ATOM
            default_timezone: "UTC" # defaults to whatever timezone set in php.ini or via date_default_timezone_set

请参见文件第部分

谢谢您的回复。这是一个解决方案是的,但是直接在属性级别添加一个带有预期时区的注释也应该可以,并且可以处理转换,或者我遗漏了什么?