Теперь, когда прошло некоторое время с момента принятия первоначального ответа, есть лучший подход:
String out = new Scanner(new URL("http://www.google.com").openStream(), "UTF-8").useDelimiter("\\A").next();
Если вы хотите немного более полную реализацию, которая не является отдельной строкой, сделайте следующее:
public static String readStringFromURL(String requestURL) throws IOException
{
try (Scanner scanner = new Scanner(new URL(requestURL).openStream(),
StandardCharsets.UTF_8.toString()))
{
scanner.useDelimiter("\\A");
return scanner.hasNext() ? scanner.next() : "";
}
}
Используйте ordinalize метод от 'active_support'.
>> time = Time.new
=> Fri Oct 03 01:24:48 +0100 2008
>> time.strftime("%a %b #{time.day.ordinalize}")
=> "Fri Oct 3rd"
Примечание при использовании IRB с Ruby 2.0 Вы должны первый показ:
require 'active_support/core_ext/integer/inflections'
Можно использовать ordinalize вспомогательный метод active_support для чисел.
>> 3.ordinalize
=> "3rd"
>> 2.ordinalize
=> "2nd"
>> 1.ordinalize
=> "1st"
Беря ответ Patrick McKenzie просто немного далее, Вы могли создать новый файл в Вашем config/initializers
каталог, названный date_format.rb
(или независимо от того, что Вы хотите), и поместите это в него:
Time::DATE_FORMATS.merge!(
my_date: lambda { |time| time.strftime("%a, %b #{time.day.ordinalize}") }
)
Затем в Вашем коде представления можно отформатировать любую дату просто путем присвоения ему нового формата даты:
My Date: <%= h some_date.to_s(:my_date) %>
Это просто, это работает и легко основываться. Просто добавьте больше строк форматов в date_format.rb файле для каждого из Ваших различных форматов даты. Вот более изложенный в деталях пример.
Time::DATE_FORMATS.merge!(
datetime_military: '%Y-%m-%d %H:%M',
datetime: '%Y-%m-%d %I:%M%P',
time: '%I:%M%P',
time_military: '%H:%M%P',
datetime_short: '%m/%d %I:%M',
due_date: lambda { |time| time.strftime("%a, %b #{time.day.ordinalize}") }
)
>> require 'activesupport'
=> []
>> t = Time.now
=> Thu Oct 02 17:28:37 -0700 2008
>> formatted = "#{t.strftime("%a %b")} #{t.day.ordinalize}"
=> "Thu Oct 2nd"
Мне нравится ответ Bartosz, но эй, так как это - направляющие, о которых мы говорим, давайте возьмем его, каждый повышается в окольном. (Редактирование: Хотя я шел в просто monkeypatch следующий метод, повороты там более чистый путь.)
DateTime
экземплярам предоставил to_formatted_s
метод ActiveSupport, который берет отдельный символ в качестве параметра и, если тот символ распознан как допустимый предопределенный формат, возвращает Строку с соответствующим форматированием.
Те символы определяются Time::DATE_FORMATS
, который является хешем символов или к строкам для стандартной функции форматирования... или к procs. Bwahaha.
d = DateTime.now #Examples were executed on October 3rd 2008
Time::DATE_FORMATS[:weekday_month_ordinal] =
lambda { |time| time.strftime("%a %b #{time.day.ordinalize}") }
d.to_formatted_s :weekday_month_ordinal #Fri Oct 3rd
, Но эй, если Вы не можете сопротивляться возможности к monkeypatch, Вы могли бы всегда давать этому более чистый интерфейс:
class DateTime
Time::DATE_FORMATS[:weekday_month_ordinal] =
lambda { |time| time.strftime("%a %b #{time.day.ordinalize}") }
def to_my_special_s
to_formatted_s :weekday_month_ordinal
end
end
DateTime.now.to_my_special_s #Fri Oct 3rd