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 });