Используйте GNU-Awk (gawk) в UNXUTILS на ПК с Win-7. Этот вопрос касается strftime (.) и сравнения времени с его использованием.
Следил за обсуждением как сравнивать значения strftime, потому что у меня похожая проблема. В данных финансового рынка у меня есть строка даты и времени (25 долларов США), заданная как «03-APR-2006 09:55:25» (поэтому время = substr (25 долларов США, 13, 8)) и моя цель состоит в том, чтобы подсчитать записи (особенно записи об отмене заказа), которые поступают после 14:00:00 (14:00).
В моем коде у меня есть строка, которая читает
{ if ($3==3) {
{ ++CK_NR}
{ ++CO_NR[$4, substr($25, 1, 11)] }
{ if (strftime(substr($25, 13, 8)) > ("14:00:00"))\
{
{ ++CK_LATE_NR }
{ ++CO_LATE_NR[$4, substr($25, 1, 11)] }
}
}
}}
Только что понял, что неравенство, которое я использовал -- if (strftime(substr($25, 13, 8)) > ("14:00:00")) -- имеет только строку в RHS, и я не делал эту строку аргументом другой функции strftime(.). Что озадачивает, так это то, что это НЕ дало мне ошибку.
Я обеспокоен тем, что, хотя он не сгенерировал никаких ошибок и код запустился, возможно, он дает мне что-то другое, чем то, что я намеревался использовать в коде. В окне командной строки выполните
gawk "{ print (strftime(\"09:55:25\") > (\"14:00:00\"))}"
дает "0" и
gawk "{ print (strftime(\"09:55:25\") ‹ (\"14:00:00\"))}"
дает "1". Руководство по GNU Awk (http://www.gnu.org/software/gawk/manual/gawk.html#Time-Functions) дает мало информации о том, что требуется для значимого сравнения. Только что попробовал вышеописанное, удалив «strftime» даже из LHS, как под
gawk "{ печать ((\"09:55:25\") > (\"14:00:00\"))}"
и
gawk "{ печать ((\"09:55:25\") > (\"14:00:00\"))}"
и получил такие же результаты. Я хочу быть уверен, что получаю правильный результат True/False, потому что GAWK сравнивает время, а не по какому-то другому внутреннему правилу, которое он использует при сравнении строк (в результате чего ограниченный тест является всего лишь совпадением). Кто-нибудь может решить эту загадку? Спасибо. Лучший,
Мерджи