Flutter中如何将字符串转换为DateTime并格式化?
解决方案
下面针对两种常用编程语言给出实现方案,核心步骤是解析带时区的时间字符串→转换到目标时区→按指定格式输出:
C# 实现
原时间字符串包含UTC时区信息,优先用DateTimeOffset解析,再转换到目标时区(示例用中国标准时间UTC+8),最后通过自定义格式字符串生成目标格式:
using System; using System.Globalization; using System.TimeZones; string originalTimeStr = "2023-04-06T20:34:53.981+00:00"; if (DateTimeOffset.TryParse(originalTimeStr, out DateTimeOffset utcOffset)) { // 转换到目标时区(此处为UTC+8,对应示例中的次日凌晨时间) TimeZoneInfo targetTz = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time"); DateTime targetDt = TimeZoneInfo.ConvertTime(utcOffset, targetTz).DateTime; // 生成第一种格式:07/04/2023 02:04:53 AM string format1 = targetDt.ToString("dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture); Console.WriteLine(format1); // 生成第二种格式:Apr 7, 2023 02:04:53 AM string format2 = targetDt.ToString("MMM d, yyyy hh:mm:ss tt", CultureInfo.InvariantCulture); Console.WriteLine(format2); }
Python 实现
使用Python标准库的datetime和zoneinfo(Python 3.9+,旧版本可替换为pytz)处理时区转换,通过strftime完成格式化:
from datetime import datetime from zoneinfo import ZoneInfo original_time_str = "2023-04-06T20:34:53.981+00:00" # 解析UTC时间字符串 utc_dt = datetime.fromisoformat(original_time_str) # 转换到目标时区(UTC+8) target_tz = ZoneInfo("Asia/Shanghai") target_dt = utc_dt.astimezone(target_tz) # 生成第一种格式 format1 = target_dt.strftime("%d/%m/%Y %I:%M:%S %p") print(format1) # 生成第二种格式(去掉日期前的多余前导0) format2 = target_dt.strftime("%b %d, %Y %I:%M:%S %p").replace(" 0", " ") print(format2)
关键说明
- 时区转换:示例中从UTC转换到UTC+8,对应原时间
2023-04-06T20:34:53+00:00会变为2023-04-07T02:34:53+08:00,匹配你给出的示例日期逻辑。 - 格式字符串含义:
dd/MM/yyyy hh:mm:ss tt:两位日/两位月/四位年 + 12小时制时分秒 + AM/PM标识MMM d, yyyy:月份英文缩写 + 无前置0的日期 + 四位年
- 避免本地化干扰:C#中使用
CultureInfo.InvariantCulture,Python中默认输出英文月份缩写,确保格式统一。
内容的提问来源于stack exchange,提问作者Dhaval Chaudhari
相关产品推荐
相关产品推荐

