বিয়োগ সময়। Go সময় থেকে সময়


108

আমার time.Timeকাছ থেকে একটি মূল্য প্রাপ্ত হয়েছে time.Now()এবং আমি অন্য সময়টি পেতে চাই যা ঠিক 1 মাস আগে।

আমি জানি যে বিয়োগ করা সম্ভব time.Sub()(যা অন্য চায় time.Time) এর মাধ্যমে সম্ভব , তবে এর ফলস্বরূপ একটি ফলাফল আসবে time.Durationএবং আমার অন্যদিকে এটি দরকার।

উত্তর:


128

অ্যাডডেট চেষ্টা করুন :

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()

    fmt.Println("now:", now)

    then := now.AddDate(0, -1, 0)

    fmt.Println("then:", then)
}

উত্পাদন:

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

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


33
একটি সময় বিয়োগ সম্পর্কে কি?
থমাস ব্রাউন

Subসময় বিয়োগ করতে। দুহ!
অভি

4
বিয়োগ একটি সময় এবং বিয়োগ সময় বিভিন্ন অপারেশন হয়। একটি সময় বিয়োগ করতে , আপনি সময় কল করুন। এখন ()। উপ (সময়। সময় {}) একটি সময়কাল হিসাবে পার্থক্য পেতে। সময়ের পরিমাণ বিয়োগ করতে , 1 মিনিট বলুন, আপনাকে সময় করতে হবে ow এখন ()। যুক্ত করুন ( সময়.মিনিট * -1 ) সাব () এবং অ্যাড () এর মধ্যে প্রতিসাম্যের অভাব হতাশাজনক।
jcope

ডিফ () বা এর মতো বর্তমানের অ্যাড / সাব বিভ্রান্তির চেয়ে সময়কাল গণনা করার জন্য অনেক বেশি স্বজ্ঞাত বিকল্প হতে পারে ...
ওয়ার্ড ডিএস

144

টমাস ব্রাউনের মন্তব্যের জবাবে, যেহেতু lnmx এর উত্তর কেবল একটি তারিখ বিয়োগের জন্য কাজ করে, এখানে তার কোডের একটি পরিবর্তন রয়েছে যা একটি সময় থেকে সময় বিয়োগের জন্য কাজ করে ime টাইম টাইপ।

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()

    fmt.Println("now:", now)

    count := 10
    then := now.Add(time.Duration(-count) * time.Minute)
    // if we had fix number of units to subtract, we can use following line instead fo above 2 lines. It does type convertion automatically.
    // then := now.Add(-10 * time.Minute)
    fmt.Println("10 minutes ago:", then)
}

উত্পাদন:

now: 2009-11-10 23:00:00 +0000 UTC
10 minutes ago: 2009-11-10 22:50:00 +0000 UTC

উল্লেখ করার মতো নয়, আপনি ব্যবহার করতে পারেন time.Hourবা time.Secondপরিবর্তেও করতে পারেনtime.Minute আপনার প্রয়োজন অনুযায়ী ।

খেলার মাঠ: https://play.golang.org/p/DzzH4SA3izp


5
ParseDurationস্ট্যাটিক মানগুলির জন্য ব্যবহার করবেন না ! কেবল ব্যবহার করুন -10 * time.Minute, এই ধ্রুবকগুলির জন্য এটি নির্ধারিত। যেমন কেবল time.Now().Add(-10 * time.Minute)আপনার প্রয়োজন হবে।
ডেভ সি

22
বাহ, সময়ের এপিআই এতটা বেমানান। সময়.এড একটি সময়কাল যুক্ত করতে হয়, সময় সময়.সব একটি সময় বিয়োগ করতে হয়। আমি এই উত্তরটি পেয়েছি কারণ আমি সাব ফাংশনটি দেখছিলাম এবং আমি অ্যাডের থেকে আলাদা স্বাক্ষর আছে বলে অনুমান করিনি।
লরেন্ট

8
আরও মনে রাখবেন যে কোনও মান দ্বারা কোনও সময়কালকে গুণিত করার সময় আপনার কোনও ত্রুটি পাওয়ার ক্ষেত্রে সুস্পষ্ট রূপান্তরিত now.Add(-10 * time.Minute)হন now.Add(time.Duration(-10) * time.Minute)...
notzippy

56

আপনি এটিকে অস্বীকার করতে পারেন time.Duration:

then := now.Add(- dur)

এমনকি আপনি একটি তুলনা করতে পারবেন time.Durationবিরুদ্ধে 0:

if dur > 0 {
    dur = - dur
}

then := now.Add(dur)

আপনি একটি কার্যকারী উদাহরণ http://play.golang.org/p/ML7svlL4eW এ দেখতে পারেন


4
যদিও এখানে একটি ক্যাচ রয়েছে: -1 * durএটি কাজ করবে তবে d := -1 ; dur = d * durএকটি ত্রুটি তৈরি করবে: "মিল এবং সময়ের সাথে মিল নেই uration সময়কাল"
ব্ল্যাকব্যাট

4
এটি প্রশ্নের শিরোনামের সঠিক উত্তর এবং এটি উত্তর হিসাবে চিহ্নিত করা উচিত।
সিলারার

0

ম্যানুয়াল অনুসারে এমন কিছু রয়েছে time.ParseDurationযা আনন্দের সাথে নেতিবাচক সময়কাল গ্রহণ করবে । অন্যথায়, আপনি প্রথম স্থানে একটি নির্দিষ্ট সময়কাল পেতে পারেন যেখানে একটি সময়কাল অস্বীকার করার প্রয়োজন নেই।

উদাহরণস্বরূপ যখন আপনার যখন দেড় ঘন্টা বিয়োগ করতে হয়, আপনি এটি এমনভাবে করতে পারেন:

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()

    fmt.Println("now:", now)

    duration, _ := time.ParseDuration("-1.5h")

    then := now.Add(duration)

    fmt.Println("then:", then)
}

https://play.golang.org/p/63p-T9uFcZo

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