কিভাবে ইউনিক্স টাইমস্ট্যাম্পকে সময় পার্স করবেন ime সময়


126

আমি একটি ইউনিক্স টাইমস্ট্যাম্প বিশ্লেষণ করার চেষ্টা করছি তবে আমি পরিসীমা ত্রুটি থেকে বেরিয়ে এসেছি। এটি আমার কাছে সত্যিকার অর্থে বোঝায় না, কারণ লেআউটটি সঠিক (গো ডক্স হিসাবে):

package main

import "fmt"
import "time"

func main() {
    tm, err := time.Parse("1136239445", "1405544146")
    if err != nil{
        panic(err)
    }

    fmt.Println(tm)
}

খেলার মাঠ

উত্তর:


239

time.Parseফাংশন ইউনিক্স টাইমস্ট্যাম্প করি না। পরিবর্তে আপনি strconv.ParseIntস্ট্রিংটি পার্স করতে int64এবং এর সাথে টাইমস্ট্যাম্প তৈরি করতে পারেন time.Unix:

package main

import (
    "fmt"
    "time"
    "strconv"
)

func main() {
    i, err := strconv.ParseInt("1405544146", 10, 64)
    if err != nil {
        panic(err)
    }
    tm := time.Unix(i, 0)
    fmt.Println(tm)
}

আউটপুট:

2014-07-16 20:55:46 +0000 UTC

খেলার মাঠ: http://play.golang.org/p/v_j6UIro7a

সম্পাদনা:

32 বিট সিস্টেমে int ওভারফ্লো এড়াতে থেকে পরিবর্তন করা strconv.Atoiহয়েছে strconv.ParseInt


1
কোনও ধারণা কেন ডক্সে এমন কোনও রেফারেন্স নেই? এমনকি তারা ইউনিক্স টাইমস্ট্যাপ লেআউটটিকে একটি বিন্যাসের উদাহরণ হিসাবে দেয়।
আরে

আমি অনুমান করি কারণ এটি কোনও পাঠ্য উপস্থাপনা নয় কারণ একটি ইউনিক্স টাইমস্ট্যাম্পের বিশ্লেষণের প্রয়োজন হয় না rather আপনার কেবলমাত্র পূর্ণসংখ্যার মানটির স্ট্রিং প্রতিনিধিত্ব আছে to এবং ডকসগুলিতে 1136239445 উল্লেখ কেবল সম্ভবত টাইমস্ট্যাম্পটি রেফারেন্স সময় হিসাবে ব্যবহার করতে হবে তা পরিষ্কার করার জন্য, এটি লেআউট হিসাবে ব্যবহৃত হবে না তা নয়।
আনিসাস

4
strconv.ParseUintনেতিবাচক সংখ্যাগুলি যেভাবেই বোঝা যায় না, তার পরিবর্তে এটি ব্যবহার করা ভাল না?
আত্মবিশ্বাস

6
@ অ্যাটমোক্রেইশনস: মান func Unix(sec int64, nsec int64) Timeগ্রহণ করে int64। এছাড়াও, সেকেন্ডের জন্য নেতিবাচক সংখ্যাগুলি সঠিক ধারণা দেয় - তারা 1970 সালের তারিখগুলি বর্ণনা করে! :) হিসাবে হিসাবে nsec, নেতিবাচক মান বলতে সেকেন্ড থেকে যে অনেক ন্যানোসেকেন্ডগুলি সরিয়ে ফেলা হয়।
আনিসাস

1
আমি কেবল "2014-07-16 20:55:46" হিসাবে তারিখ এবং সময় চাই এটি কীভাবে অর্জন করা যায়?
কার্তিক

14

আপনি সরাসরি সময় ব্যবহার করতে পারেন time সময়ের ইউনিক্স ফাংশন যা ইউনিক্সের টাইম স্ট্যাম্পটিকে ইউটিসিতে রূপান্তর করে

package main

import (
  "fmt"
  "time"
)


func main() {
    unixTimeUTC:=time.Unix(1405544146, 0) //gives unix time stamp in utc 

    unitTimeInRFC3339 :=unixTimeUTC.Format(time.RFC3339) // converts utc time to RFC3339 format

    fmt.Println("unix time stamp in UTC :--->",unixTimeUTC)
    fmt.Println("unix time stamp in unitTimeInRFC3339 format :->",unitTimeInRFC3339)
}

আউটপুট

unix time stamp in UTC :---> 2014-07-16 20:55:46 +0000 UTC
unix time stamp in unitTimeInRFC3339 format :----> 2014-07-16T20:55:46Z

গো খেলার মাঠে চেক ইন করুন: https://play.golang.org/p/5FtRdnkxAd


4

তারিখের জন্য তৈরি করা কয়েকটি ফাংশন ভাগ করে নেওয়া:

দয়া করে নোট করুন যে আমি একটি নির্দিষ্ট অবস্থানের জন্য সময় পেতে চেয়েছিলাম (কেবলমাত্র ইউটিসি সময় নয়)। আপনি যদি ইউটিসি সময় চান তবে কেবল লোক ভেরিয়েবল এবং .In (লোক) ফাংশন কলটি সরিয়ে ফেলুন।

func GetTimeStamp() string {
     loc, _ := time.LoadLocation("America/Los_Angeles")
     t := time.Now().In(loc)
     return t.Format("20060102150405")
}
func GetTodaysDate() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("2006-01-02")
}

func GetTodaysDateTime() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("2006-01-02 15:04:05")
}

func GetTodaysDateTimeFormatted() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("Jan 2, 2006 at 3:04 PM")
}

func GetTimeStampFromDate(dtformat string) string {
    form := "Jan 2, 2006 at 3:04 PM"
    t2, _ := time.Parse(form, dtformat)
    return t2.Format("20060102150405")
}

সরানো .In(loc)আমাকে সময় দিয়েছে -0400 EDT। এটির পরিবর্তে .In(time.UTC)আমাকে ইউটিসিতে সময় দিয়েছে।
নাটোরোম

3

গো ডকুমেন্টেশন অনুসারে ইউনিক্স স্থানীয় সময় দেয়।

ইউনিক্স প্রদত্ত ইউনিক্স সময়ের সাথে সম্পর্কিত স্থানীয় সময়কে ফেরত দেয়

এর অর্থ হল আপনার কোডটি যে মেশিনটিতে চলছে তার উপর আউটপুট নির্ভর করবে যা আপনার প্রায়শই প্রয়োজন হয় তবে কখনও কখনও ইউটিসিতে আপনার মান থাকতে পারে।

এটি করার জন্য, আমি স্নিপেটটি এটি ইউটিসিতে একটি সময় ফিরিয়ে আনার জন্য রূপান্তরিত করেছিলাম :

i, err := strconv.ParseInt("1405544146", 10, 64)
if err != nil {
    panic(err)
}
tm := time.Unix(i, 0)
fmt.Println(tm.UTC())

আমার মেশিনে এটি প্রিন্ট করে (সিইএসটি)

2014-07-16 20:55:46 +0000 UTC

0

আমি যেখানে প্রচুর টাইমস্ট্যাম্পগুলি ভাসিয়ে রাখি সেখানে প্রচুর লগিং করি এবং টাইমস্ট্যাম্পগুলি স্ট্রিং হিসাবে পেতে এই ফাংশনটি ব্যবহার করি:

func dateFormat(layout string, d float64) string{
    intTime := int64(d)
    t := time.Unix(intTime, 0)
    if layout == "" {
        layout = "2006-01-02 15:04:05"
    }
    return t.Format(layout)
}

-6

শুধু সময় ব্যবহার করুন। পার্স

উদাহরণ:

package main

import (
    "fmt"
    "time"
)

func main() {
    fromString := "Wed, 6 Sep 2017 10:43:01 +0300"
    t, e := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700", fromString)
    if e != nil {
        fmt.Printf("err: %s\n", e)
    }
    fmt.Printf("UTC time: %v\n", t.UTC())
}

Play.golang.org এ কাজ করার উদাহরণ ।


2
প্রশ্নটি একটি ইউনিক্স টাইমস্ট্যাম্প নির্দিষ্ট করে। এই উত্তরটি সেই দিকটিকে সম্বোধন করে না।
t3h2mas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.