Как Вы делаете относительное время в направляющих?

Метод Java toString ()

Если вы хотите представить любой объект в виде строки, то появляется метод toString ().

Метод toString () возвращает строковое представление объекта.

Если вы печатаете какой-либо объект, java-компилятор внутренне вызывает метод toString () для объекта. Таким образом, переопределение метода toString () возвращает желаемый результат, это может быть состояние объекта и т. Д. Зависит от вашей реализации.

Преимущество метода Java toString ()

By переопределяя метод toString () класса Object, мы можем вернуть значения объекта, поэтому нам не нужно много писать код.

Выход без метода toString ()

class Student{  
 int id;  
 String name;  
 String address;  

 Student(int id, String name, String address){  
 this.id=id;  
 this.name=name;  
 this.address=address;  
 }  

 public static void main(String args[]){  
   Student s1=new Student(100,”Joe”,”success”);  
   Student s2=new Student(50,”Jeff”,”fail”);  

   System.out.println(s1);//compiler writes here s1.toString()  
   System.out.println(s2);//compiler writes here s2.toString()  
 }  
}  

Output:Student@2kaa9dc
       Student@4bbc148

Вы можете видеть в примере выше # 1. печать s1 и s2 печатает значения Hashcode для объектов, но я хочу напечатать значения этих объектов. Поскольку java-компилятор внутренне вызывает метод toString (), переопределение этого метода возвращает указанные значения. Давайте рассмотрим это с приведенным ниже примером:

Example#2

Output with overriding toString() method

class Student{  
 int id;  
 String name;  
 String address;  

 Student(int id, String name, String address){  
 this.id=id;  
 this.name=name;  
 this.address=address;  
 }  

//overriding the toString() method  
public String toString(){ 
  return id+" "+name+" "+address;  
 }  
 public static void main(String args[]){  
   Student s1=new Student(100,”Joe”,”success”);  
   Student s2=new Student(50,”Jeff”,”fail”);  

   System.out.println(s1);//compiler writes here s1.toString()  
   System.out.println(s2);//compiler writes here s2.toString()  
 }  
} 

Output:100 Joe success
       50 Jeff fail

Обратите внимание, что toString () в основном связано с понятием полиморфизма в Java. В Eclipse попробуйте щелкнуть по кнопке toString () и щелкнуть правой кнопкой мыши по ней. Затем нажмите «Открыть декларацию» и посмотрите, откуда приходит Superclass toString ().

222
задан John Topley 15 October 2008 в 15:54
поделиться

5 ответов

Я записал это, но должен проверить существующие методы, упомянутые, чтобы видеть, лучше ли они.

module PrettyDate
  def to_pretty
    a = (Time.now-self).to_i

    case a
      when 0 then 'just now'
      when 1 then 'a second ago'
      when 2..59 then a.to_s+' seconds ago' 
      when 60..119 then 'a minute ago' #120 = 2 minutes
      when 120..3540 then (a/60).to_i.to_s+' minutes ago'
      when 3541..7100 then 'an hour ago' # 3600 = 1 hour
      when 7101..82800 then ((a+99)/3600).to_i.to_s+' hours ago' 
      when 82801..172000 then 'a day ago' # 86400 = 1 day
      when 172001..518400 then ((a+800)/(60*60*24)).to_i.to_s+' days ago'
      when 518400..1036800 then 'a week ago'
      else ((a+180000)/(60*60*24*7)).to_i.to_s+' weeks ago'
    end
  end
end

Time.send :include, PrettyDate
51
ответ дан maček 4 November 2019 в 13:36
поделиться

Что относительно

30.seconds.ago
2.days.ago

Или что-то еще Вы стреляли для?

20
ответ дан Honza 4 November 2019 в 13:36
поделиться

Можно использовать арифметические операторы, чтобы сделать относительное время.

Time.now - 2.days 

даст Вам 2 дня назад.

12
ответ дан TonyLa 4 November 2019 в 13:36
поделиться

Что-то вроде этого работало бы.

def relative_time(start_time)
  diff_seconds = Time.now - start_time
  case diff_seconds
    when 0 .. 59
      puts "#{diff_seconds} seconds ago"
    when 60 .. (3600-1)
      puts "#{diff_seconds/60} minutes ago"
    when 3600 .. (3600*24-1)
      puts "#{diff_seconds/3600} hours ago"
    when (3600*24) .. (3600*24*30) 
      puts "#{diff_seconds/(3600*24)} days ago"
    else
      puts start_time.strftime("%m/%d/%Y")
  end
end
9
ответ дан Femaref 4 November 2019 в 13:36
поделиться

Кажется, что Вы ищете time_ago_in_words метод (или distance_of_time_in_words ) от ActiveSupport. Назовите его как это:

<%= time_ago_in_words(timestamp) %>
363
ответ дан Andrew Marshall 4 November 2019 в 13:36
поделиться
Другие вопросы по тегам:

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