@Kle6800

Не отрабатывает if проверки входит ли данное время в необходимый интервал?

Конвертировал строку в формат времени
определил переменные в прин выводит корректно
package main
//https://4gophers.ru/articles/go-i-sql-bazy-dannyh/#.WZShtvlSCUl  работа с БД Pg
import (
	"fmt"  ///пакет стандартной библиотеки   Базовый пакет для форматирования функций ввода
	"time"  ///пакет для аботы со временем
	"database/sql"  ///пакет для работы с БД
	_ "github.com/lib/pq" //пакет для работы с БД
	"log" ///пакет для логирования
	"os"  //системный пакет
)
////указываю постоянные значения подключения к БД и сокету FreeSWITCH
const (
	DB_HOST		        = "127.0.0.1"
	DB_USER    	        = "postgres"
	DB_PASSWORD 	    = "postgres"
	DB_NAME     	    = "freeswitch"
)
////обьявляю глобальные переменные
var (
	err error
	id int
	client int
	id_dispach int
	db *sql.DB  ///
	interval_time_start  string
	interval_time_end  string
	current_time  time.Time  ///тип данных время
    convert_time_start time.Time
	convert_time_end time.Time
)
/////функция проверки на ошибки
func checkErr(err error) {
	if err != nil {
		fmt.Println(err)
	}
}
///Функция отправки SQL запросов в БД
func sql_req()  {
	rows, err := db.Query("SELECT client,id FROM  dialer_golang WHERE state = 'called' ORDER BY RANDOM() LIMIT 1")
	if err != nil {fmt.Println(err)}
	defer rows.Close()
	for rows.Next() {
		rows.Scan(&client, &id)  ///декодирую элементы которые хочу получить в БД
		dialer_rows , err := db.Query("SELECT  id_dispatch FROM dialer_golang WHERE client = $1 and state = 'called'",client)
		if err != nil {fmt.Println(err)
			return
		}
		defer dialer_rows.Close()  ///закрываем коннект к Базе данных
		for dialer_rows.Next() {
			dialer_rows.Scan(&id_dispach)
		}
		data_rows , err := db.Query("SELECT interval_time_start,interval_time_end FROM  dialer_golang WHERE client = $1 and state = 'called' ",client)
		checkErr(err)  ///функция обработки ошибок
		defer data_rows.Close()  ///закрываем коннект к Базе данных
		for data_rows.Next() {
			data_rows.Scan(&interval_time_start,&interval_time_end)
		}
	}
}
func main()  {
	//time.Sleep(300 * time.Millisecond)   ///команда задержки sleep
	// подключение к  Базе данных
	db_property := "host=" + DB_HOST + " user=" + DB_USER + " password=" + DB_PASSWORD + " dbname=" + DB_NAME + " sslmode=disable"
	db, err = sql.Open("postgres", db_property)  ///https://toster.ru/q/452264
	err = db.Ping()
	if err != nil {fmt.Println("Error: IS NOT Connect  for  " + DB_NAME + " Host: " + DB_HOST)} else {fmt.Println("Database " + DB_NAME + " Host: " + DB_HOST + " Connect is GOOD")} ///проверка на ошибку если вернет ошибку то  выведет то что коннекта к бд нет
	defer db.Close() ///закрываем коннект к Базе данных
	sql_req()  ///вызываю функцию без параметров
	////вывожу текущее время которое есть в системе
	current_time := time.Now().Format("15:04:05")  ///Вывожу текущее время в нужном мне формате , так чтобы формат БД  и формат вывода был единым
	convert_time_start , err = time.Parse("15:04:05", interval_time_start)   ///онвертирую значение в тип данный время чтобы потом корректно сравнить
	convert_time_end , err = time.Parse("15:04:05", interval_time_end)   ///онвертирую значение в тип данный время чтобы потом корректно сравнить
	time_end  :=  convert_time_end.Format("15:04:05")
	time_start :=  convert_time_start.Format("15:04:05")
	fmt.Println("Время",time_start,time_end,current_time)



	////после того как получуили все необходимые данные для вызова необходимо сделать проверку попадает ли данное время в укаханный интервал
	if  time_start.Before(time_current) && time_end.After(time_current) {
		fmt.Println("Мы попали в указанный интервал ")
	} else {
		fmt.Println("не попали в указанный интервал ")}
	f, err := os.OpenFile("daemon_go.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
	if err != nil {
		log.Fatal(err)
	}
	defer f.Close()
	log.SetOutput(f)
	log.Println("ID Клиента",id,"Номер клиента",client,"DISPACH",id_dispach,"Время начала обзвона ",convert_time_start,"Время окончания обзвона",convert_time_end,"Текущее время в формате Час Минута Секунда",current_time)  ///////получил все переменные которые будут нужны для системы автообзвона
}


Выводит в принт если закоментировать if проверки на время
[root@p441022 script]# go run daemon.go
Database freeswitch Host: 127.0.0.1 Connect is GOOD
Время 02:00:00 23:00:00 21:26:44


Если if оставить
[root@p441022 script]# go run daemon.go
# command-line-arguments
./daemon.go:80: time_start.Before undefined (type string has no field or method Before)
./daemon.go:80: undefined: time_current
./daemon.go:80: time_end.After undefined (type string has no field or method After)
./daemon.go:80: undefined: time_curren
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
@victorinamina
time.Format() - это строка.
А у строки уже нет .Before() и .After()

Если вам нужно проверять Before и After, то это нужно делать ДО того как вы превратили переменную типа time.Time в переменную типа string.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Наверное будет достаточно
current_time := time.Now()
time_start , err = time.Parse("15:04:05", interval_time_start)
time_end , err = time.Parse("15:04:05", interval_time_end)
if  time_start.Before(time_current) && time_end.After(time_current) {
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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