github.com/TrueBlocks/trueblocks-core/src/apps/chifra@v0.0.0-20241022031540-b362680128f7/pkg/tslib/tots.go (about)

     1  package tslib
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base"
     7  	"github.com/bykof/gostradamus"
     8  )
     9  
    10  // FromBnToTs returns a chain-specific Linux timestamp given a block number
    11  func FromBnToTs(chain string, bn base.Blknum) (base.Timestamp, error) {
    12  	ret, err := FromBn(chain, bn)
    13  	return base.Timestamp(ret.Ts), err
    14  }
    15  
    16  // FromDateToTs returns a Linux timestamp given a date string (not chain-specific)
    17  func FromDateToTs(dateStr string) (base.Timestamp, error) {
    18  	str := toIsoDateStr(dateStr)
    19  	t, err := gostradamus.Parse(str, gostradamus.Iso8601)
    20  	if err != nil {
    21  		return 0, err
    22  	}
    23  	return base.Timestamp(t.UnixTimestamp()), nil
    24  }
    25  
    26  func toIsoDateStr(dateStr string) string {
    27  	// assumes an already validated date string
    28  	str := strings.Replace(dateStr, "T", " ", -1)
    29  	if strings.Count(str, ":") == 0 {
    30  		if strings.Count(str, " ") == 1 {
    31  			str += ":00:00"
    32  		} else {
    33  			str += " 00:00:00"
    34  		}
    35  	} else if strings.Count(str, ":") == 1 {
    36  		str += ":00"
    37  	}
    38  	str = strings.Replace(str, " ", "T", -1)
    39  	str += ".000000"
    40  	return str
    41  }