Pharo 11中如何将DateTime转换为指定格式的字符串?
在Pharo 11中自定义DateAndTime的字符串格式
当然可以,Pharo 11的DateAndTime类提供了多种方式生成自定义格式的时间字符串,以下是几种常用方案:
1. 用printStringUsing:快速生成(推荐)
通过格式化字符串指定输出样式,支持多种占位符:
%Y:四位年份%m:两位月份(带前导零)%d:两位日期(带前导零)%H:24小时制两位小时%M:两位分钟%S:两位秒数%I:12小时制两位小时%p:大写AM/PM标记
示例代码:
"生成'2024/05/20 14:30:45'格式" DateAndTime now printStringUsing: '%Y/%m/%d %H:%M:%S' "生成'2024-05-20 PM02:30'格式" DateAndTime now printStringUsing: '%Y-%m-%d %p%I:%M'
2. 用printOn:format:自定义细节
通过数组参数配置各部分格式与分隔符,数组结构为#(年格式 月格式 日格式 日期分隔符 时格式 分格式 秒格式),其中:
- 1:带前导零的两位数字
- 2:不带前导零的数字
- 3:四位数字
- 0:不输出对应部分
示例代码:
| currentTime | currentTime := DateAndTime now. "生成'2024-05-20 14:30'(不含秒数)" String streamContents: [ :stream | currentTime printOn: stream format: #(3 1 1 $- 1 1 0) ]
3. 拆分时间部分手动拼接
直接提取年、月、日、时、分等独立部分,自由组合成需要的格式:
| dt dateStr timeStr | dt := DateAndTime now. dateStr := dt year asString, '年', (dt month asString padded: true to: 2 with: $0), '月', (dt dayOfMonth asString padded: true to: 2 with: $0), '日'. timeStr := (dt hour asString padded: true to: 2 with: $0), ':', (dt minute asString padded: true to: 2 with: $0). dateStr, ' ', timeStr "输出示例:'2024年05月20日 14:30'"
内容的提问来源于stack exchange,提问作者VitorCruz
相关产品推荐
相关产品推荐

