时间格式AM/PM

这篇博客介绍了如何使用Objective-C的NSDateFormatter来格式化日期,并将时间转换为12小时制,同时展示了AM和PM的设置方法。示例代码中,通过指定dateFormat属性为yyyy-MM-ddhh:mm:ssa,实现了日期字符串的转换。
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.AMSymbol = @"AM";
formatter.PMSymbol = @"PM";
formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss a”; // hh 是十二小时制,HH 二十四小时制 注意后面加的字母a
NSString *ff = [formatter stringFromDate:date];

 

 

你想要的是:**将一个包含 AM/PM 的日期时间字符串(如 `"10/25/2024 2:30:45 PM"`)去除 `AM/PM`,并转换为标准的 24 小时制日期时间格式输出(如 `"10/25/2024 14:30:45"`)**。 ✅ 最终目标: - 正确解析原始字符串中的 AM/PM - 转换为 24 小时制逻辑 - 输出不带 AM/PM 的完整日期时间格式 --- ### ✅ 推荐方案:使用 `DateTime.TryParseExact` 解析 + `ToString("yyyy-MM-dd HH:mm:ss")` 格式化输出 ```csharp using System; using System.Globalization; class Program { static void Main() { // 示例输入(含 AM/PM) string input = "10/25/2024 2:30:45 PM"; // 支持的格式:月/日/年 时:分:秒 AM/PM string[] formats = { "M/d/yyyy h:mm:ss tt", "MM/dd/yyyy h:mm:ss tt", "M/d/yyyy hh:mm:ss tt", "MM/dd/yyyy hh:mm:ss tt" }; if (DateTime.TryParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedTime)) { // 成功解析后,以 24 小时制格式输出(无 AM/PM) string result = parsedTime.ToString("MM/dd/yyyy HH:mm:ss"); Console.WriteLine(result); // 输出: 10/25/2024 14:30:45 } else { Console.WriteLine("解析失败"); } } } ``` --- ### 🔍 代码详解: | 部分 | 说明 | |------|------| | `input` | 原始字符串,包含 AM/PM | | `formats` | 定义多种可能的输入格式,兼容单/双位月、日、时等 | | `CultureInfo.InvariantCulture` | 确保不受系统区域影响 | | `TryParseExact` | 精确匹配格式,安全可靠 | | `ToString("MM/dd/yyyy HH:mm:ss")` | 输出为 **24 小时制**,且无 AM/PM | > 💡 关键点:`HH` 表示 24 小时制小时(00–23),`hh` 是 12 小时制(01–12),`tt` 是 AM/PM。 --- ### ✅ 更通用的方法(支持更多输入格式) ```csharp public static string ConvertTo24HourDateTime(string input) { string[] formats = { "M/d/yyyy h:mm:ss tt", "MM/dd/yyyy h:mm:ss tt", "M/d/yyyy hh:mm:ss tt", "MM/dd/yyyy hh:mm:ss tt", "M/d/yyyy h:mm tt", "MM/dd/yyyy h:mm tt", "yyyy-MM-dd h:mm:ss tt", "yyyy-MM-dd HH:mm:ss" }; if (DateTime.TryParseExact(input.Trim(), formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result)) { return result.ToString("yyyy-MM-dd HH:mm:ss"); // 推荐标准格式 } throw new FormatException($"无法解析时间字符串: {input}"); } ``` #### 使用示例: ```csharp Console.WriteLine(ConvertTo24HourDateTime("10/25/2024 2:30:45 PM")); // 2024-10-25 14:30:45 Console.WriteLine(ConvertTo24HourDateTime("1/5/2024 12:00:00 AM")); // 2024-01-05 00:00:00 Console.WriteLine(ConvertTo24HourDateTime("2024-12-31 11:59:59 PM")); // 2024-12-31 23:59:59 ``` --- ### 📌 输出格式建议(根据需求选择) | 格式字符串 | 输出示例 | 说明 | |-----------|----------|------| | `"MM/dd/yyyy HH:mm:ss"` | `10/25/2024 14:30:45` | 美式风格 | | `"yyyy-MM-dd HH:mm:ss"` | `2024-10-25 14:30:45` | ISO 风格,推荐用于数据库、API | | `"dd/MM/yyyy HH:mm:ss"` | `25/10/2024 14:30:45` | 欧式风格 | --- ### ✅ 如果你要存入数据库或用于序列化? 直接使用 `DateTime` 类型即可,无需保留字符串: ```csharp DateTime myTime = ConvertTo24HourDateTimeAsObject("10/25/2024 2:30:45 PM"); // 可用于 Entity Framework、SQL 参数等 public static DateTime ConvertTo24HourDateTimeAsObject(string input) { string[] formats = { "M/d/yyyy h:mm:ss tt", "MM/dd/yyyy h:mm:ss tt" }; return DateTime.TryParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt) ? dt : throw new FormatException($"无效的时间格式: {input}"); } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值