From e359a32bed8919ef9256c6e3439d4b46e549e149 Mon Sep 17 00:00:00 2001 From: fish Date: Mon, 13 Apr 2026 21:45:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BD=BF=E7=94=A8=E4=B8=9C=E5=85=AB=E5=8C=BA?= =?UTF-8?q?=E6=97=B6=E5=8C=BA=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 7 +++++++ services/user-service/user-login-account/src/main.rs | 5 +++++ services/user-service/user-login-email/src/main.rs | 5 +++++ services/user-service/user-register-account/src/main.rs | 5 +++++ services/user-service/user-register-email/src/main.rs | 5 +++++ 5 files changed, 27 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 3726d93..c8eaa4e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -174,6 +174,13 @@ OK - Rust 代码中使用 `chrono::Utc::now()` 生成时间戳,统一在事务开始前创建 `let now = Utc::now();`,确保同一笔业务中各表时间一致。 - `modify_date` 更新时同样需要在业务代码中显式传入 `Utc::now()`。 +#### 时区策略 + +项目采用**数据库存 UTC、查询按东八区显示**的策略: +- 业务层始终使用 `chrono::Utc::now()` 生成 UTC 时间写入数据库。 +- 每个服务在建立数据库连接池后,执行 `SET TIME ZONE 'Asia/Shanghai';`,确保 `TIMESTAMP WITH TIME ZONE` 字段在查询时以东八区格式返回。 +- 如需在 Rust 代码中做东八区展示转换,使用 `chrono::FixedOffset::east_opt(8 * 3600)` 处理。 + ### 4. 环境变量 所有服务通过环境变量读取配置: diff --git a/services/user-service/user-login-account/src/main.rs b/services/user-service/user-login-account/src/main.rs index 07dd1d6..b8203f5 100644 --- a/services/user-service/user-login-account/src/main.rs +++ b/services/user-service/user-login-account/src/main.rs @@ -63,6 +63,11 @@ async fn main() { .await .expect("Failed to connect to database"); + sqlx::query("SET TIME ZONE 'Asia/Shanghai'") + .execute(&pool) + .await + .expect("Failed to set timezone"); + info!("Database connected"); // JWT 密钥 diff --git a/services/user-service/user-login-email/src/main.rs b/services/user-service/user-login-email/src/main.rs index 438022e..9006ba2 100644 --- a/services/user-service/user-login-email/src/main.rs +++ b/services/user-service/user-login-email/src/main.rs @@ -63,6 +63,11 @@ async fn main() { .await .expect("Failed to connect to database"); + sqlx::query("SET TIME ZONE 'Asia/Shanghai'") + .execute(&pool) + .await + .expect("Failed to set timezone"); + info!("Database connected"); // JWT 密钥 diff --git a/services/user-service/user-register-account/src/main.rs b/services/user-service/user-register-account/src/main.rs index 2d1cfd9..a7905b2 100644 --- a/services/user-service/user-register-account/src/main.rs +++ b/services/user-service/user-register-account/src/main.rs @@ -58,6 +58,11 @@ async fn main() { .await .expect("Failed to connect to database"); + sqlx::query("SET TIME ZONE 'Asia/Shanghai'") + .execute(&pool) + .await + .expect("Failed to set timezone"); + info!("Database connected"); let state = Arc::new(AppState { db: pool }); diff --git a/services/user-service/user-register-email/src/main.rs b/services/user-service/user-register-email/src/main.rs index 15adf04..055a2d7 100644 --- a/services/user-service/user-register-email/src/main.rs +++ b/services/user-service/user-register-email/src/main.rs @@ -58,6 +58,11 @@ async fn main() { .await .expect("Failed to connect to database"); + sqlx::query("SET TIME ZONE 'Asia/Shanghai'") + .execute(&pool) + .await + .expect("Failed to set timezone"); + info!("Database connected"); let state = Arc::new(AppState { db: pool });