我正在编写脚本以将IPTC数据添加到图像文件夹中。它从EXIF信息中提取日期,并将其添加到'Caption'
IPTC标记中。
date = iptc["DateTimeOriginal"]
date = date.strftime('%A %e %B %Y').upcase
iptc["Caption"] = '%s: %s (%s)' % [date, caption, location]
除日期输出外,脚本可以工作:
Sunday 13 October 2013
理想情况下,我希望输出:
Sunday 13th October 2013
任何建议都将不胜感激。
答案 0 :(得分:3)
如果您能够(并且愿意)将Ruby gem带入组合中,请考虑ActiveSupport::Inflector
。
您可以使用
gem install active_support
(您可能需要sudo
)
然后在您的文件中要求它并包含ActiveSupport::Inflector
:
require 'active_support/inflector' # loads the gem
include ActiveSupport::Inflector # brings methods to current namespace
那么你可以{will-nilly ordinalize
整数:
ordinalize(1) # => "1st"
ordinalize(13) # => "13th"
您可能需要手动将日期字符串化:
date = iptc["DateTimeOriginal"]
date_string = date.strftime('%A ordinalday %B %Y')
date_string.sub!(/ordinalday/, ordinalize(date.day))
date_string.upcase!
你应该在路上:
iptc["Caption"] = "#{date_string}: #{caption} #{location}"
答案 1 :(得分:3)
如果您不想要求ActiveSupport的帮助程序,也许只需复制一个执行该作业的特定方法:
# File activesupport/lib/active_support/inflector/methods.rb
def ordinalize(number)
if (11..13).include?(number.to_i.abs % 100)
"#{number}th"
else
case number.to_i.abs % 10
when 1; "#{number}st"
when 2; "#{number}nd"
when 3; "#{number}rd"
else "#{number}th"
end
end
end
在脚本中使用该方法,将代码更改为:
date = date.strftime("%A #{ordinalize(date.day)} %B %Y")