AppleScript字符串转date报错:求支持的日期格式及转换方案
AppleScript日期字符串转date类型的解决方法
一、确定当前系统支持的日期格式
- 直接通过AppleScript生成示例日期并输出为字符串,就能看到系统认可的格式:
set sampleDate to current date log sampleDate as string
控制台输出的内容就是当前系统默认识别的日期字符串格式。
- 也可以通过「系统偏好设置→语言与地区→高级→日期与时间」查看当前设置的短日期、长日期和时间格式,这些格式就是AppleScript转date时能识别的标准格式。
二、具体转换方案
1. 处理Shell生成的YYYY-MM-DD格式字符串
ISO格式的日期字符串AppleScript无法直接识别,有两种可靠解决方式:
方式一:借助Shell的date命令转成系统本地格式
-- 假设Shell输出的日期为"2023-04-01" set shellDateStr to "2023-04-01" -- 转换为系统本地可识别的日期字符串 set localDateStr to do shell script "date -j -f '%Y-%m-%d' " & quoted form of shellDateStr & " +'%A, %B %d, %Y at 00:00:00'" -- 转为date类型 set targetDate to localDateStr as date
方式二:在AppleScript内拆分字符串构造date对象
set shellDateStr to "2023-04-01" -- 初始化一个基准日期 set targetDate to date "January 1, 1900" -- 拆分并替换年、月、日 set year of targetDate to (text 1 thru 4 of shellDateStr) as integer set month of targetDate to (text 6 thru 7 of shellDateStr) as integer set day of targetDate to (text 9 thru 10 of shellDateStr) as integer
2. 处理AppleScript自身输出的日期字符串
你遇到的current date as string转date失败的问题,是因为该命令输出的本地化长格式字符串,转date时需要严格匹配系统规则,推荐以下方案:
方式一:直接保留date对象(最优)
如果不需要字符串传递,直接使用current date返回的date类型即可,完全没必要转成字符串再转回:
set theDate to current date
方式二:用标准化属性获取可识别的字符串
set theDate to current date -- 获取系统短日期格式字符串 set dateStr to date string of theDate -- 获取时间字符串 set timeStr to time string of theDate -- 拼接后转为date类型 set tDate to (dateStr & " " & timeStr) as date
方式三:用Shell命令解析已有长格式字符串
如果已经拿到了类似"Saturday, April 1, 2023 at 14:49:59"的字符串,可通过Shell强制解析:
set theDateStr to "Saturday, April 1, 2023 at 14:49:59" set targetDate to date (do shell script "date -j -f '%A, %B %d, %Y at %H:%M:%S' " & quoted form of theDateStr & " +'%Y-%m-%d %H:%M:%S'")
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

