|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
-,- ... where TimeStampField >= CURRENT_DATE(SERVER_ZONE) как я задолбался... когда же вы поймете, что если время сервера еще нужно по каким-то административным причинам, то таймзона сервера вообще никому не нужна. У нас вообще CURRENT_TIMESTAMP возвращает сервер, потому что никаких таймзон нет. А так его мог бы возвращать КЛИЕНТ. Представьте себе, что так и есть, и что CURRENT_* возвращает дату и время именно клиента, а не сервера, даже в хранимых процедурах и триггерах. И что случится? Да ничего. Без клиента сервер к базам не обращается, никак и никогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 10:23 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
kdvего мог бы возвращать КЛИЕНТ Дима, поумерь свои фантазии :-) Его всегда возвращал и будет возвращать сервер. Но он может это делать с учетом таймзоны клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 10:56 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
kdvУ нас вообще CURRENT_TIMESTAMP возвращает сервер, потому что никаких таймзон нет. А так его мог бы возвращать КЛИЕНТ. Да не дай бог. В триггере, пишущем время изменения записи, интересно именно время сервера. Я не готов полагаться на время клиента (оно почти всегда неточное). Да и пользователь банально может время перевести на компе. А если я на клиенте генерирую текущее время (для последующей записи его в БД), то дёргаю "select current_timestamp from rdb$database". Иначе вообще не понятно как быть. Запретить пользователю переводить у себя стрелки часов я не могу. Т.е. у меня у всех клиентов берётся только серверное время, и видят они всё только в том виде как оно на сервере лежит, даже если пользователь заходит из другого города. И это правильно в моём случае. И именно такое поведение я так полагаю у большинства. И именно его имхо нужно бы сохранить по-дефолту. Но уж если нужно чтобы пользователь видел всё в своей тайм-зоне (возможно криво установленной из-за непропатченности ОС), то тогда желательно чтобы было достаточно просто указать через FB API чтобы был использован пояс клиентской ОС, и всё бы работало. Но по дефолту хочется всё в серверном поясе видеть. Я вот сейчас читаю sql.ru и вижу время по Москве, а не моё локальное. И тут это правильно. Причём не факт что sql.ru хостится на сервере у которого таймзона московская. Т.е. он возможно и не зависит от настроек операционки. Зачем же нам ограничивать разработчиков на FB и администраторов? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 11:12 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
-Т.е. у меня у всех клиентов берётся только серверное время, и видят они всё только в том виде как оно на сервере лежит, даже если пользователь заходит из другого города. И это правильно в моём случае. И именно такое поведение я так полагаю у большинства. И именно его имхо нужно бы сохранить по-дефолту. Но уж если нужно чтобы пользователь видел всё в своей тайм-зоне (возможно криво установленной из-за непропатченности ОС), то тогда желательно чтобы было достаточно просто указать через FB API чтобы был использован пояс клиентской ОС, и всё бы работало. Но по дефолту хочется всё в серверном поясе видеть. Если закрепить "серверный пояс" = 0:00 - это не только будет удовлетворять всем твоим требованиям, но и будет инвариантно среди всех серверов на всех осях. Возражения? Я вот сейчас читаю sql.ru и вижу время по Москве, а не моё локальное. И тут это правильно. Причём не факт что sql.ru хостится на сервере у которого таймзона московская. Т.е. он возможно и не зависит от настроек операционки. Зачем же нам ограничивать разработчиков на FB и администраторов? Ну, это означает только то, что в свойствах форума прописана по дефолту таймзона MSK. Точно так же ее можно сменить на любую другую. И это будет клиентское отображение, т.к. веб-сервер - клиент СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 13:48 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Кстати, мне прямо стало интересно: приведите хоть кто-нибудь живой пример, где 1) требуется знать таймзону сервера 2) она во что бы то ни стало не должна быть нулевой (UTC) По мне, никакие региональные настройки машины, на которой крутится сервер, не должны влиять на его работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 13:53 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal, ага, ну ты понял. :-) сейчас у нас current_time это время сервера, а время клиента известно только клиенту, и как народ разруливает когда время сервера и клиента отличается, я не знаю. Пока только видел что при отличии этих "времен" вдруг начинается ужас-ужас. Откуда следует, что "серверное время" чаще используется только для синхронизации серверного времени с клиентским. А по умолчанию принимается, что время на клиенте и сервере одинаково. И париться этим вопросом в клиент-серверных приложениях начинают только когда возникает разница. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 16:16 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНу тогда ты должен бы представлять себе на что это будет похоже с миллионной-то user base...Проблемы транснациональных корпрораций решает специально нанятый персонал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 16:31 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Fr0sT-BrutalЕсли закрепить "серверный пояс" = 0:00 - это не только будет удовлетворять всем твоим требованиям, но и будет инвариантно среди всех серверов на всех осях. Возражения?Тривиальное, в общем-то: прежде чем выдвигать гениальные идеи неплохо было бы ознакомиться с вопросом. А то у меня начинает складываться ощущение, что FB - первое и единственное приложение, для которого возникла проблема работы датами-временем ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 16:41 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Fr0sT-BrutalКстати, мне прямо стало интересно: приведите хоть кто-нибудь живой пример, где У меня есть платежный шлюз, который обрабатывает запросы от разных платежных агентов. Платежный шлюз интегрируется в биллинговой системой. Платежный шлюз и биллинговая система находятся в GMT+3. Платежные агенты находятся где угодно. Платежные агенты взаимодействуют с платежным шлюзом, передавая ему информацию о транзакции: идентификатор, дата и время учета платежа, дата и время проведения платежа, сумма платежа и некоторая другая информация. Дата и время проведения платежа — это момент, когда пользователь (клиент) осуществил платеж. Дата и время учета платежа — это момент, когда процессинговый центр подтвердил транзакцию. Некоторые платежные агенты возвращают дату и время в своем часовом поясе или в часовом поясе платежного терминала, с которого осуществлялся платеж (а для крупных систем платежные терминалы находятся в разных часовых поясах). Некоторые платежные агенты возвращают дату и время в UTC. Некоторые платежные агенты для даты и времени учета платежа используют локальный часовой пояс, а для даты и времени проведения платежа используют часовой пояс платежного терминала. Отчеты и сверки основываются на дате и времени учета платежа. В биллинговой системе дата и время всегда указываются в часовом поясе GMT+3. Это живой пример, когда мне на сервере нужно знать часовой пояс сервера (чтобы корректно перевести в GMT+3 для биллинговой системы), часовой пояс клиента (чтобы оператор видел отчеты в местном часовом поясе) и часовой пояс удаленной системы (чтобы правильно формировать ежедневные и ежемесячные отчеты и сверки). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 17:38 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Alibek B.Это живой пример... когда хранение отметок дата-время в UTC снимает кучу головной боли. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 17:51 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Время приходит не в UTC, от третьих сторон. Поэтому от хранения часового пояса и от операций со временем не уйти. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 17:54 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Кроме того, есть резон хранить метки именно в том виде, в котором они пришли. Например пришла транзакция с меткой 2015-06-02T18:56:12+0400. А на сервере в этот момент время 2015-06-02T17:55:12+0300 (или 2015-06-02T14:55:12 в UTC). То есть время на моем сервере и на удаленном сервере различается на минуту. Тем не менее, учет будет осуществляться именно по удаленному времени, поэтому хранить нужно именно его. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 17:57 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Время приходит вместе с информацией о часовом поясе. Корректной или нет, но вместе с информацией о часовом поясе. Если заносить в базу UTC, то и биллингу и оператору время нужного часового пояса отрисует (их) клиент. Хранить информацию о часовом поясе необходимо только для разбора конфликтных ситуаций. И это хранение может быть совершенно отдельным. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 17:58 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Мне казалось, что я на русском языке написал. Не только конфликтные ситуации, но и отчеты/сверки (суточные/месячные реестры и соответствующие суммы платежей и вознаграждений) формируются по дате и времени учета, которое передается платежным агентом. И часовой пояс в этой метке времени может быть любым. Если уж хранить в БД временную метку без часового пояса, то ее нужно сохранять в том виде, в котором она приходит, а не переводить в UTC. Но если в разных столбцах используется разный часовой пояс, то это хуже, чем не использовать его вовсе (всегда хранить в UTC или в локальном часовом поясе). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 22:54 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Alibek B.Это живой пример, когда мне на сервере нужно знать часовой пояс сервера (чтобы корректно перевести в GMT+3 для биллинговой системы) Сервер-то тут причем? Все, что тебе нужно знать, - это пояс биллинговой системы. А вообще +1 к B.A.S., но тут уже всю систему надо перекраивать ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 09:56 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Alibek B.Дата и время проведения платежа — это момент, когда пользователь (клиент) осуществил платеж. Дата и время учета платежа — это момент, когда процессинговый центр подтвердил транзакцию. Кстати, а зачем тебе вообще использовать время проведения? Время учета - вот что главное. А оно выставляется проц. центром, соответственно, его можно и нужно хранить в инвариантном виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 10:00 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Fr0sT-BrutalСервер-то тут причем? Все, что тебе нужно знать, - это пояс биллинговой системы. Часовой пояс сервера мне нужно знать, чтобы работать с временем платежного агента (переводить его в UTC или в пояс биллинговой системы). Fr0sT-BrutalКстати, а зачем тебе вообще использовать время проведения? Время учета - вот что главное. А оно выставляется проц. центром, соответственно, его можно и нужно хранить в инвариантном виде. Время проведения это информационный параметр, его можно и не использовать. Важно именно время учета. Оно выставляется процессинговым центром. Но процессинговые центры у разных платежных агентов разные, и часовой пояс передаваемого времени также разный. И даже у одного платежного агента теоретически могут прийти две разные транзакции с разными часовыми поясами. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 12:19 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Alibek B.Но процессинговые центры у разных платежных агентов разные, и часовой пояс передаваемого времени также разный. И даже у одного платежного агента теоретически могут прийти две разные транзакции с разными часовыми поясами.... и всё это ситуации, наилучшее разруливание которых делает клиент или сервер приложения. Но не СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 18:07 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
То есть для получения реестра платежей предлагается забрать клиентом все транзакции, а затем делать группировку на клиенте? Чем это лучше group by на сервере? Кроме гипотетичной сложности обработки TZ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 19:45 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Alibek B.Важно именно время учета. Оно выставляется процессинговым центром. Но процессинговые центры у разных платежных агентов разные, и часовой пояс передаваемого времени также разный. И даже у одного платежного агента теоретически могут прийти две разные транзакции с разными часовыми поясами. Еще одно доказательство, сколько ненужного геморроя возникает при использовании локальных времен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2015, 12:02 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Alibek B.То есть для получения реестра платежей предлагается забрать клиентом все транзакции, а затем делать группировку на клиенте?Мы, видимо, о разном. Я - о том, что клиент приводит (входящие) данные платежа к нужному виду и только после этого начинает работать с базой. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2015, 17:15 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Basil A. SidorovЯ - о том, что клиент приводит (входящие) данные платежа к нужному виду и только после этого начинает работать с базой. Нет, как раз об этом. Но с разных сторон. Что подразумевается под привидением данных к нужному виду? Перевод в UTC и сохранение в БД? Но формирование реестров и сверки осуществляются по переданному времени учета в том часовом поясе, в котором время передавалось. Если мне пришла транзакция с отметкой 2015-06-04T02:00:00+05:00, то эта транзакция должна попасть в реестр от 4 июня. А если я эту отметку переведу в UTC 2015-06-03T21:00:00 и сохраню в БД, то при выполнении SQL-запроса в группировкой GROUP BY trunc(REQ_CLOCK, 'dd') эта запись будет отнесена к группе 2015-06-03. Чтобы правильно выполнить группировку, сервер должен знать свой часовой пояс, а также часовой пояс платежного агента. Либо на клиент нужно загружать все транзакции, пересчитывать часовой пояс на клиенте и группировать также на клиенте. Также можно сохранять в БД отметку времени в том виде, в котором она пришла, без часового пояса. То есть для приведенного ранее примера в БД будет сохранена отметка 2015-06-04T02:00:00. Для работы с платежными агентами этого будет достаточно. Но кроме платежных агентов у меня также есть биллинговая система, в которую нужно импортировать платежи, но время операции нужно перевести в часовой пояс биллинговой системы. Этот перевод в принципе тоже можно сделать на клиенте, но клиент должен знать часовой пояс платежного агента, часовой пояс платежного шлюза, часовой пояс биллинговой системы. На сервере это сделать проще, надежнее и быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2015, 20:04 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Alibek B.Чтобы правильно выполнить группировку, сервер должен знать свой часовой пояс, а также часовой пояс платежного агентаВотзадлянафига??? Достаточно, чтобы клиент отправил параметр, который сервер и использует в запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 16:29 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Basil A. SidorovДостаточно, чтобы клиент отправил параметр, который сервер и использует в запросе. Можно пример? Что значит «параметр», разница в часах/минутах? Правильный учет даты и времени — это достаточно сложно . Если это делать на клиенте, то легко допустить ошибку. Лучше работу с датой и временем осуществлять на сервере БД, на котором таких ошибок не возникнет, если сервер и его окружение правильно сконфигурированы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 17:03 |
|
Текущее время с сервера
|
|||
---|---|---|---|
#18+
Alibek B.Что значит «параметр», разница в часах/минутах?Есть два способа привести мировое время к местному: 1. Указать смещение; 2. Указать (именованный) часовой пояс. У каждого способа свои плюсы и минусы, но любой вариант позволяет серверу вести все расчёты "по времени клиента", вне зависимости от собственного часового пояса. Сервер обязан знать собственный часовой пояс только тогда, когда он "берёт" местное время из операционной системы или тогда, когда timestamp сохранён в базу по местному времени сервера. Но второй вариант мы уже, вроде как, отбросили. Первый, для вашей задачи, вроде бы, тоже не требуется.Если это делать на клиенте, то легко допустить ошибку. Лучше работу с датой и временем осуществлять на сервере БД, на котором таких ошибок не возникнет, если сервер и его окружение правильно сконфигурированы.Вы правда не замечаете логического прокола в своих рассуждениях? Если клиент неверно сконфигурирован, то он будет поставлять неверные исходные данные. Если искажена первичная информация, то ошибки отчётности уже малосущественны. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2015, 17:25 |
|
|
start [/forum/topic.php?fid=40&msg=38974557&tid=1562795]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 192ms |
0 / 0 |