Time.Time को स्ट्रिंग में बदलें


103

मैं अपने डेटाबेस से []stringगो में कुछ मान जोड़ने की कोशिश कर रहा हूं । इनमें से कुछ टाइमस्टैम्प हैं।

मुझे त्रुटि मिली:

सरणी तत्व में टाइप स्ट्रिंग के रूप में U.Created_date (टाइप टाइम.टाइम) का उपयोग नहीं कर सकते

मैं परिवर्तित कर सकते हैं time.Timeकरने के लिए string?

type UsersSession struct {
    Userid int
    Timestamp time.Time
    Created_date time.Time
}

type Users struct {
    Name string
    Email string
    Country string
    Created_date time.Time
    Id int
    Hash string
    IP string
}

-

var usersArray = [][]string{}

rows, err := db.Query("SELECT u.id, u.hash, u.name, u.email, u.country, u.IP, u.created_date, us.timestamp, us.created_date FROM usersSession AS us LEFT JOIN users AS u ON u.id = us.userid WHERE us.timestamp + interval 30 minute >= now()")

U := Users{}
US := UsersSession{}

for rows.Next() {
    err = rows.Scan(&U.Id, &U.Hash, &U.Name, &U.Email, &U.Country, &U.IP, &U.Created_date, &US.Timestamp, &US.Created_date)
    checkErr(err)

    userid_string := strconv.Itoa(U.Id)
    user := []string{userid_string, U.Hash, U.Name, U.Email, U.Country, U.IP, U.Created_date, US.Timestamp, US.Created_date}
    // -------------
    // ^ this is where the error occurs
    // cannot use U.Created_date (type time.Time) as type string in array element (for US.Created_date and US.Timestamp aswell)
    // -------------

    usersArray = append(usersArray, user)
    log.Print("usersArray: ", usersArray)
}

संपादित करें

मैंने निम्नलिखित जोड़ा। यह अब काम करता है, धन्यवाद।

userCreatedDate := U.Created_date.Format("2006-01-02 15:04:05")
userSessionCreatedDate := US.Created_date.Format("2006-01-02 15:04:05")
userSessionTimestamp := US.Timestamp.Format("2006-01-02 15:04:05")

यह इस तथ्य को उजागर करने के लायक है कि कंपाइलर त्रुटि पूरी तरह से त्रुटि का वर्णन करती है। आप स्ट्रिंग्स की एक सरणी में एक प्रकार का समय नहीं डाल सकते हैं।
बेन कैंपबेल

जवाबों:


160

Time.String()A को a में कन्वर्ट करने के लिए आप मेथड का उपयोग कर सकते time.Timeहै string। यह प्रारूप स्ट्रिंग का उपयोग करता है "2006-01-02 15:04:05.999999999 -0700 MST"

यदि आपको अन्य कस्टम प्रारूप की आवश्यकता है, तो आप उपयोग कर सकते हैं Time.Format()। उदाहरण के लिए yyyy-MM-dd HH:mm:ssप्रारूप स्ट्रिंग के उपयोग के प्रारूप में टाइमस्टैम्प प्राप्त करें "2006-01-02 15:04:05"

उदाहरण:

t := time.Now()
fmt.Println(t.String())
fmt.Println(t.Format("2006-01-02 15:04:05"))

आउटपुट (इसे खेल के मैदान पर आज़माएं ):

2009-11-10 23:00:00 +0000 UTC
2009-11-10 23:00:00

नोट: Go Playground पर समय हमेशा ऊपर देखे गए मान पर सेट होता है। वर्तमान तिथि / समय देखने के लिए इसे स्थानीय रूप से चलाएं।

यह भी ध्यान दें कि Time.Format()लेआउट के रूप में, stringआपको हमेशा एक ही समय पास करना होगा - संदर्भ समय-स्वरूपित किया गया, जिस तरह से आप परिणाम स्वरूपित करना चाहते हैं। इस पर प्रलेखित है Time.Format():

प्रारूप लेआउट के अनुसार स्वरूपित समय मान का एक पाठीय प्रतिनिधित्व देता है, जो कि संदर्भ समय, कैसे परिभाषित करता है, यह दिखा कर प्रारूप को परिभाषित करता है।

Mon Jan 2 15:04:05 -0700 MST 2006

प्रदर्शित किया जाएगा अगर यह मूल्य थे; यह वांछित आउटपुट के उदाहरण के रूप में कार्य करता है। फिर वही प्रदर्शन नियम समय मान पर लागू होंगे।


21
सिर्फ स्पष्ट करने के लिए। एक कस्टम समय प्रारूप को पारित करने के लिए, आपको समय मान का उपयोग करना होगा Mon Jan 2 15:04:05 -0700 MST 2006और इस समय को आप जो भी प्रारूप में चाहते हैं, डाल सकते हैं। यदि आप इसे इस मान से पास करते हैं तो गो प्रारूप को समझ जाएगा। आप किसी अन्य समय मान का उपयोग नहीं कर सकते। मुझे यह पता लगाने में कुछ समय लगा और इसे टिप्पणी के रूप में जोड़ने के लिए सोचा
अहमद Essam

@AhmedEssam धन्यवाद, जवाब में शामिल किया।
icza

20
package main                                                                                                                                                           

import (
    "fmt"
    "time"
)

// @link https://golang.org/pkg/time/

func main() {

    //caution : format string is `2006-01-02 15:04:05.000000000`
    current := time.Now()

    fmt.Println("origin : ", current.String())
    // origin :  2016-09-02 15:53:07.159994437 +0800 CST

    fmt.Println("mm-dd-yyyy : ", current.Format("01-02-2006"))
    // mm-dd-yyyy :  09-02-2016

    fmt.Println("yyyy-mm-dd : ", current.Format("2006-01-02"))
    // yyyy-mm-dd :  2016-09-02

    // separated by .
    fmt.Println("yyyy.mm.dd : ", current.Format("2006.01.02"))
    // yyyy.mm.dd :  2016.09.02

    fmt.Println("yyyy-mm-dd HH:mm:ss : ", current.Format("2006-01-02 15:04:05"))
    // yyyy-mm-dd HH:mm:ss :  2016-09-02 15:53:07

    // StampMicro
    fmt.Println("yyyy-mm-dd HH:mm:ss: ", current.Format("2006-01-02 15:04:05.000000"))
    // yyyy-mm-dd HH:mm:ss:  2016-09-02 15:53:07.159994

    //StampNano
    fmt.Println("yyyy-mm-dd HH:mm:ss: ", current.Format("2006-01-02 15:04:05.000000000"))
    // yyyy-mm-dd HH:mm:ss:  2016-09-02 15:53:07.159994437
}    

1
जब मैं fmt.Println (time.Now ()। Format ("2017/20/01 13:53:35") को आज़माता हूं) तो मुझे अजीब सा लग रहा है 21017/210/01 112: 3012: 1230
irom

3
fmt.Println (time.Now ()। format ("2006/01/02 15:04:05")) का उपयोग करें, क्योंकि प्रारूप स्ट्रिंग निश्चित है, यह "2006 01 02 15 04 05"
Hao

2

खेल का मैदान http://play.golang.org/p/DN5Py5MxaB पर जाएं

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    // The Time type implements the Stringer interface -- it
    // has a String() method which gets called automatically by
    // functions like Printf().
    fmt.Printf("%s\n", t)

    // See the Constants section for more formats
    // http://golang.org/pkg/time/#Time.Format
    formatedTime := t.Format(time.RFC1123)
    fmt.Println(formatedTime)
}

जब मैं fmt.Println (time.Now ()। Format ("2017/20/01 13:53:35") को आज़माता हूं) तो मुझे अजीब सा लग रहा है 21017/210/01 112: 3012: 1230
irom

क्योंकि आप 20 करते हैं जो कि जाने के लिए सार्थक नहीं है इसलिए 2 वह तारीख है जो उस समय 21 थी और अतिरिक्त 0 को अभी @irom
nikoss

1

गो लैंग में डेट और टाइम फॉर्मेट को कंवर्ट करने के लिए सरल समाधान पाएं। कृपया नीचे उदाहरण देखें।

पैकेज लिंक: https://github.com/vigneshuvi/GoDateFormat

कृपया पाटीदारों को खोजें: https://medium.com/@Martynas/formatting-date-and-time-in-golang-5816112bf098

package main


// Import Package
import (
    "fmt"
    "time"
    "github.com/vigneshuvi/GoDateFormat"
)

func main() {
    fmt.Println("Go Date Format(Today - 'yyyy-MM-dd HH:mm:ss Z'): ", GetToday(GoDateFormat.ConvertFormat("yyyy-MM-dd HH:mm:ss Z")))
    fmt.Println("Go Date Format(Today - 'yyyy-MMM-dd'): ", GetToday(GoDateFormat.ConvertFormat("yyyy-MMM-dd")))
    fmt.Println("Go Time Format(NOW - 'HH:MM:SS'): ", GetToday(GoDateFormat.ConvertFormat("HH:MM:SS")))
    fmt.Println("Go Time Format(NOW - 'HH:MM:SS tt'): ", GetToday(GoDateFormat.ConvertFormat("HH:MM:SS tt")))
}

func GetToday(format string) (todayString string){
    today := time.Now()
    todayString = today.Format(format);
    return
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.