Управление путем Ruby

При преобразовании строки даты ISO 8601 / RFC 3339 в объект NSDate используется языковой стандарт en_US_POSIX, если пользователь не использует григорианский календарь. См. Technical Q & amp; A 1480 .

В вашем случае вы пытаетесь получить представление строки года из объекта даты. В этом случае вам может не понадобиться en_US_POSIX. Это необходимо только в том случае, если вам нужно использовать григорианский календарь независимо от того, какой календарь может использоваться в настоящее время.

Как уже отмечалось другими, вы должны использовать yyyy, а не YYYY. Первый возвращает календарный год. Последний возвращает год в календаре на основе «Недели года», который не всегда может быть таким же значением, что и календарный год.

См. Шаблоны форматирования даты для обсуждения, контрастирующего y и Y.

Кстати, если вам действительно нужен компонент года в дате, вы также можете использовать связанные с NSDateComponents методы NSCalendar.

27
задан 26 May 2009 в 09:44
поделиться

5 ответов

Вот чем я закончил - Ruby-версия сценария оболочки setenv:

  # Read application config                                                       
$hConf, $fConf = {}, File.expand_path("../config.rb", __FILE__)
$hConf = File.open($fConf) {|f| eval(f.read)} if File.exist? $fConf

  # Application classpath                                                         
$: << ($hConf[:appRoot] || File.expand_path("../bin/app", __FILE__))

  # Ruby libs                                                                     
$lib = ($hConf[:rubyLib] || File.expand_path("../bin/lib", __FILE__))
($: << [$lib]).flatten! # lib is string or array, standardize                     

Тогда мне просто нужно убедиться, что этот скрипт вызывается один раз, прежде чем что-то еще, и не нужно трогать отдельные исходные файлы.

Я поместил некоторые параметры в конфигурационный файл, например расположение внешних (не gem) библиотек:

# Site- and server specific config - location of DB, tmp files etc.
{
  :webRoot => "/srv/www/myapp/data",
  :rubyLib => "/somewhere/lib",
  :tmpDir => "/tmp/myapp"
}

Это хорошо работает для меня, и я могу повторно использовать сценарий setenv в нескольких проекты просто путем изменения параметров в файле конфигурации. Гораздо лучшая альтернатива, чем сценарии оболочки, IMO.

0
ответ дан j-g-faustus 14 October 2019 в 13:36
поделиться

Начиная с Ruby 1.9, вы можете использовать require_relative , чтобы сделать это:

require_relative '../src/myclass'

Если вам это нужно для более ранних версий, вы можете получить его из гема расширений согласно этот SO комментарий .

30
ответ дан Community 14 October 2019 в 13:36
поделиться

Here is a slightly modified way to do it:

$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "src"))

By prepending the path to your source to $LOAD_PATH (aka $:) you don't have to supply the root etc. explicitly when you require your code i.e. require 'myclass'

12
ответ дан 28 November 2019 в 04:56
поделиться

sris's answer is the standard approach.

Another way would be to package your code as a gem. Then rubygems will take care of making sure your library files are in your path.

1
ответ дан 28 November 2019 в 04:56
поделиться

То же, менее шумное ИМХО:

$:.unshift File.expand_path("../../src", __FILE__)
require 'myclass'

или просто

require File.expand_path "../../src/myclass", __FILE__

Протестировано с ruby ​​1.8.7 и 1.9.0 на (Debian) Linux - скажите, пожалуйста, работает ли это в Windows, тоже.

Почему более простой метод (например, 'use', 'require_relative' или sg, подобный этому) не встроен в стандартную библиотеку? ОБНОВЛЕНИЕ: require_relative существует с 1.9.x

9
ответ дан 28 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: