S
S
Sergey2017-08-17 18:29:05
go
Sergey, 2017-08-17 18:29:05

Does not work out if checks whether the given time is included in the required interval?

Converted the string to the time format
defined the variables in the print output correctly

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)  ///////получил все переменные которые будут нужны для системы автообзвона
}

Prints if you comment out if checks for a while
[[email protected] 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 if leave
[[email protected] 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

Answer the question

In order to leave comments, you need to log in

[[+comments_count]] answer(s)
V
victorinamina, 2017-08-17
@Kle6800

time.Format() is a string.
And the string no longer has .Before() and .After()
If you need to check Before and After, then you need to do this BEFORE you turn the variable of type time.Time into a variable of type string.

U
uvelichitel, 2017-08-17
@uvelichitel

It will probably be enough

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) {

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question