使用@db.Timetz()时Prisma未返回时区信息求助
Prisma @db.Timetz() 未返回带时区时间的解决方法
问题概况
已在Prisma Schema中为startTime和endTime字段配置@db.Timetz(),但API返回结果中未包含时区信息,数据库中存储的是带时区的时间数据。
核心原因
Prisma的DateTime类型用于映射日期+时间类型(如PostgreSQL的timestamp with time zone),而timetz是仅包含时间+时区的类型,二者类型不匹配会导致时区信息在转换过程中丢失。
解决步骤
1. 修改Prisma Schema字段类型
将startTime和endTime的类型从DateTime改为Time,保留@db.Timetz()注解:
model TableX { id String @id @default(uuid()) startTime Time? @db.Timetz() endTime Time? @db.Timetz() createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }
2. 重新生成Prisma客户端
执行命令更新客户端,使Schema变更生效:
npx prisma generate
3. 验证API响应
重新调用API后,startTime和endTime将返回带时区的时间字符串(如"10:00:00+03:00")。
额外排查点
- 若仍有问题,检查Prisma客户端版本,建议升级至最新稳定版:
npm update prisma - 确认API序列化逻辑未主动移除时区信息(如某些JSON序列化工具默认转换为本地时间且隐藏时区,需配置保留时区格式)。
内容的提问来源于stack exchange,提问作者Oleksandr Petryk
相关产品推荐
相关产品推荐

