| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package base
- import (
- log "Server-Core/Server/Base/Log"
- "bytes"
- "runtime"
- "strconv"
- "strings"
- "time"
- )
- // 字符串首字母转大写
- func StrFirstToUpper(str string) string {
- if len(str) < 1 {
- return ""
- }
- strArray := []rune(str)
- if strArray[0] >= 97 && strArray[0] <= 122 {
- strArray[0] -= 32
- }
- return string(strArray)
- }
- // 两个时间戳是否同一天
- func IsSameDay(time1, time2 int64, offset int) bool {
- return StartTimestamp(time1, offset) == StartTimestamp(time2, offset)
- }
- // 获取今天0点时间戳(计算时差)
- func TodayStartTimestamp(offset int) int64 {
- return StartTimestamp(time.Now().Unix(), offset)
- }
- // 获取指定时间戳的0点时间戳(计算时差)
- func StartTimestamp(timestamp int64, offset int) int64 {
- timeStr := time.Unix(timestamp, 0).Format("2006-01-02")
- t, _ := time.Parse("2006-01-02", timeStr)
- t2 := t.Unix() + int64(offset)
- if t2 > timestamp {
- t2 -= 86400
- }
- return t2
- }
- // unicode转中文
- func Unicode2Hans(raw []byte) []byte {
- str, err := strconv.Unquote(strings.Replace(strconv.Quote(string(raw)), `\\u`, `\u`, -1))
- if err != nil {
- return raw
- }
- return []byte(str)
- }
- // 打印Panic堆栈信息
- func PanicTrace(kb int) string {
- s := []byte("/src/runtime/panic.go")
- e := []byte("\ngoroutine ")
- line := []byte("\n")
- stack := make([]byte, kb<<10) //4KB
- length := runtime.Stack(stack, true)
- start := bytes.Index(stack, s)
- stack = stack[start:length]
- start = bytes.Index(stack, line) + 1
- stack = stack[start:]
- end := bytes.LastIndex(stack, line)
- if end != -1 {
- stack = stack[:end]
- }
- end = bytes.Index(stack, e)
- if end != -1 {
- stack = stack[:end]
- }
- stack = bytes.TrimRight(stack, "\n")
- return string(stack)
- }
- // 通用异常捕获
- func TryE() {
- errs := recover()
- if errs == nil {
- return
- }
- log.Error("%v\n", errs)
- log.Error(panicTrace(8))
- }
- func panicTrace(kb int) string {
- s := []byte("/src/runtime/panic.go")
- e := []byte("\ngoroutine ")
- line := []byte("\n")
- stack := make([]byte, kb<<10) //4KB
- length := runtime.Stack(stack, true)
- start := bytes.Index(stack, s)
- stack = stack[start:length]
- start = bytes.Index(stack, line) + 1
- stack = stack[start:]
- end := bytes.LastIndex(stack, line)
- if end != -1 {
- stack = stack[:end]
- }
- end = bytes.Index(stack, e)
- if end != -1 {
- stack = stack[:end]
- }
- stack = bytes.TrimRight(stack, "\n")
- return string(stack)
- }
|