-2

我確實有一個包含時間戳的postgres數據庫。這個時間戳遵循ISO標準,看起來像:ActiveRecords顯示ISO8601時間戳

2017-08-28 20:14:45.684926+00 

我用的ActiveRecord在Ruby /西納特拉環境中訪問數據庫,但返回的Ts爲ISO8601。

有沒有辦法強制格式化爲ISO而不是ISO8601?

我想避免一旦收到數據解析。

現在,我使用的命令:

class ApiResponse < ActiveRecord::Base 

    class << self 

    def send_query(user, params) 

     limit = params.include?('limit') ? params['limit'] : 50 

     where_params = { 
      userid: user, 
      allowed_intent: true 
     } 

     ApiResponse.select([:id, :ts, :userid, :intent, :response]) 
      .where(where_params) 
      .order(ts: :desc) 
      .limit(limit).to_a 

    end 
end 

的ApiResponse類用於訪問通過ActiveRecord的數據庫,並能正常工作。但格式不正確。它表明:

2017-08-29T05:58:44.488Z 

,而不是像

2017-08-28 20:14:45.684926+00 

這種格式ISO是一個在DB

任何想法如何獲取時間戳TS正確格式化,因爲我希望ActiveRecord的內呼叫?

+0

什麼是時間戳? ISO和ISO有什麼區別?什麼是ts? iso8601和ISO8601有什麼區別? – sawa

+0

什麼是不是ISO8601,你想格式化的ISO格式? – sawa

+0

@sawa ISO8601看起來像:「2017-08-29T05:58:44.488Z」和Postgres Db使用的ISO看起來像:「2017-08-28 20:14:45.684926 + 00」 – Seb

回答

0

我覺得有一些誤解的位置:

  1. Postgres使用ISO 8601的輸出(即所謂的ISO,他們沒有不同的標準)https://www.postgresql.org/docs/9.6/static/datatype-datetime.html

  2. ActiveRecord的,我想,返回DateTime類的實例或類似的東西,而不是該格式的字符串。

  3. 你所看到的只是一種用於顯示的格式;您可以使用strftime以另一種格式顯示數據。

+0

PG類正在返回格式爲PostGres標準,即「2017-08-28 20:14:45.684926 + 00」。 ActiveRecords遵循格式ISO8601。使用strftime意味着我將不得不分析數組中的每一項來改變格式,這很耗時JSON解析不是一個快速的過程。或者在這種情況下,有沒有辦法直接格式化ActiveRecords調用的結果,例如ts.format或strftime(ts)... – Seb

+0

您的ts不是字符串,它是日期時間的實例或其他等效的東西。顯示的方式不是如何存儲的。如果你想它轉換爲字符串喲可以轉換strftime並給出你想要的格式。 – valentin

+0

是否可以在存儲時顯示它。 ?我不熟悉strftime。你可以添加一個例子來獲得像這樣的格式:「2017-08-28 20:14:45。684926 + 00「 – Seb