在我的凤凰应用程序中,我一直在使用int [] myArray = {2,3}
和Ecto
将我的日期存储在Timex
中。当我向最终用户显示结果时,我以相反的顺序显示日期(即今天位于列表的顶部),然后按时间顺序对结果进行排序。
为了使其正常工作,我需要在处理排序之前应用用户时区。我一直在做的(直到现在)是检索数据,使用postgres
转换日期,然后运行排序客户端。例如,我可能会这样做:
Timex
但是,现在我想要实现这个服务器端。如果我做了类似以下的事情:
tz_user = Timex.Timezone.get( "Australia/Hobart", Timex.now )
captains_log = CaptainsLog.list_logs_for_user( current_user )
days = captains_log
|> Enum.map( fn (log) -> %Log{ log |
star_date: Timex.Timezone.convert( log.star_date, tz_user ),
end_transmission: Timex.Timezone.convert( log.end_transmission, tz_user )
} end)
|> Enum.group_by( fn ( log ) -> Timex.to_date(log.end_transmission) end )
|> Enum.sort( fn (e1, e2) ->
{ date1, _ } = e1
{ date2, _ } = e2
Timex.compare( date1, date2 ) >= 0
end)
我的时区没有调整日期(正如我所假设的那样)。例如," 8:48 am"存储在数据库中为" 9:48 pm"并显示为" 11:48 am"在上面的select语句中。 select star_date at time zone 'AEST' from captains_log;
并不是更好,结果是" 10:48 am"。
以下是架构中AEDT
和star_date
的样子:
end_transmission
将记录添加到数据库后,field :star_date, Timex.Ecto.DateTime
field :end_transmission, Timex.Ecto.DateTime
将设置为最后一个star_date
。 end_transmission
通常设置为end_transmission
。
那么Timex.now
postgres
如何将日期/时间存储在Ecto
中?我可以编写一个调整到所需时区的服务器端查询吗?每个用户的时区可能不同,我可以传递给postgres
什么,以便我可以使查询适用于不同的时区?