You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:52:32