fix(mobile-app): 修复多个页面时间显示为UTC而非北京时间的问题

后端数据库统一存储UTC时间,前端展示时需调用 .toLocal() 转换为
设备本地时区(中国地区即 UTC+8 北京时间)。

以下5个页面的 _formatDateTime() 方法缺少 .toLocal() 转换,
导致页面显示的时间比北京时间慢8小时:

- 预种合并详情页 (pre_planting_merge_detail_page.dart)
  → 合并时间、签署时间、挖矿开启时间
- 预种持仓页 (pre_planting_position_page.dart)
  → 购买时间、合并时间
- 合同签署页 (contract_signing_page.dart)
  → 合同签署时间
- 转让列表页 (transfer_list_page.dart)
  → 转让创建时间
- 转让详情页 (transfer_detail_page.dart)
  → 转让各状态时间

修复方式:在格式化前统一调用 dt.toLocal() 将UTC转为本地时区。
后端和数据库保持UTC不变,仅前端展示层做时区转换。

注:ledger_detail_page.dart 已使用 DateTimeUtils.formatDateTime()
(内含 .toLocal()),无需修改。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-03-03 03:11:48 -08:00
parent 532be9a561
commit 55f81ff329
5 changed files with 20 additions and 15 deletions

View File

@ -852,7 +852,8 @@ class _ContractSigningPageState extends ConsumerState<ContractSigningPage> {
///
String _formatDateTime(DateTime? dateTime) {
if (dateTime == null) return '-';
return '${dateTime.year}-${dateTime.month.toString().padLeft(2, '0')}-${dateTime.day.toString().padLeft(2, '0')} ${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}';
final local = dateTime.toLocal();
return '${local.year}-${local.month.toString().padLeft(2, '0')}-${local.day.toString().padLeft(2, '0')} ${local.hour.toString().padLeft(2, '0')}:${local.minute.toString().padLeft(2, '0')}';
}
///

View File

@ -711,12 +711,13 @@ class _PrePlantingMergeDetailPageState
);
}
///
/// UTC
String _formatDateTime(DateTime dt) {
return '${dt.year}-${dt.month.toString().padLeft(2, '0')}-'
'${dt.day.toString().padLeft(2, '0')} '
'${dt.hour.toString().padLeft(2, '0')}:'
'${dt.minute.toString().padLeft(2, '0')}';
final local = dt.toLocal();
return '${local.year}-${local.month.toString().padLeft(2, '0')}-'
'${local.day.toString().padLeft(2, '0')} '
'${local.hour.toString().padLeft(2, '0')}:'
'${local.minute.toString().padLeft(2, '0')}';
}
}

View File

@ -815,11 +815,12 @@ class _PrePlantingPositionPageState
);
}
///
/// UTC
String _formatDateTime(DateTime dt) {
return '${dt.year}-${dt.month.toString().padLeft(2, '0')}-'
'${dt.day.toString().padLeft(2, '0')} '
'${dt.hour.toString().padLeft(2, '0')}:'
'${dt.minute.toString().padLeft(2, '0')}';
final local = dt.toLocal();
return '${local.year}-${local.month.toString().padLeft(2, '0')}-'
'${local.day.toString().padLeft(2, '0')} '
'${local.hour.toString().padLeft(2, '0')}:'
'${local.minute.toString().padLeft(2, '0')}';
}
}

View File

@ -649,8 +649,9 @@ class _TransferDetailPageState extends ConsumerState<TransferDetailPage> {
}
String _formatDateTime(DateTime dt) {
return '${dt.year}-${dt.month.toString().padLeft(2, '0')}-${dt.day.toString().padLeft(2, '0')} '
'${dt.hour.toString().padLeft(2, '0')}:${dt.minute.toString().padLeft(2, '0')}';
final local = dt.toLocal();
return '${local.year}-${local.month.toString().padLeft(2, '0')}-${local.day.toString().padLeft(2, '0')} '
'${local.hour.toString().padLeft(2, '0')}:${local.minute.toString().padLeft(2, '0')}';
}
}

View File

@ -397,8 +397,9 @@ class _TransferListPageState extends ConsumerState<TransferListPage>
}
String _formatDateTime(DateTime dt) {
return '${dt.year}-${dt.month.toString().padLeft(2, '0')}-${dt.day.toString().padLeft(2, '0')} '
'${dt.hour.toString().padLeft(2, '0')}:${dt.minute.toString().padLeft(2, '0')}';
final local = dt.toLocal();
return '${local.year}-${local.month.toString().padLeft(2, '0')}-${local.day.toString().padLeft(2, '0')} '
'${local.hour.toString().padLeft(2, '0')}:${local.minute.toString().padLeft(2, '0')}';
}
}