-
-
Notifications
You must be signed in to change notification settings - Fork 260
Closed
Labels
QuestionIndicates that an issue, pull request, or discussion needs more informationIndicates that an issue, pull request, or discussion needs more information
Description
Hello,
Thanks for a great library, it is very helpful. I am looking to upgrade from v2.5.4 to v2.6.0; however, I ran into an issue with Daylight Savings Time and wanted to ask about what is going on...
To prove out the issue, I wrote a simple program that just uses the current time and prints it out in various formats.
Version 2.5.4
package main
import (
"log"
"time"
"github.com/dromara/carbon/v2"
)
func main() {
log.SetFlags(0)
log.Printf("***** Using Go.Time\n")
// Gets the current time
t_now := time.Now()
// Get the current timezone location
location := t_now.Location()
// Print the current timezone name
log.Printf("Current Timezone[%s]\n", location.String())
log.Printf("Current Time[%s]\n", t_now)
log.Printf("***** Converting Go.Time -> Carbon\n")
var c carbon.Carbon = carbon.NewCarbon(t_now)
log.Printf("carbon timezone[%s].\n", c.Timezone())
log.Printf("carbon IS08601 date/time[%s].\n", c.ToIso8601String())
log.Printf("carbon RFC3339 date/time[%s].\n", c.ToRfc3339String())
log.Printf("carbon IsDST[%v].\n", c.IsDST())
log.Printf("***** Using Carbon\n")
carbon.SetTimezone(carbon.UTC)
carbon.SetWeekStartsAt(carbon.Sunday)
carbon.SetLocale("en")
var now carbon.Carbon = carbon.Now()
log.Printf(" UTC String() now=[%s]\n", now.String())
log.Printf(" UTC ToString() now=[%s]\n", now.ToString())
log.Printf(" UTC ToDateTimeString now=[%s]\n", now.ToDateTimeString())
log.Printf("Local now=[%s]\n", now.SetTimezone(carbon.Local))
log.Printf("Local String() now=[%s]\n", now.String())
log.Printf("Local ToString() now=[%s]\n", now.ToString())
log.Printf("Local ToDateTimeString() now=[%s]\n", now.ToDateTimeString())
log.Printf(" EST now=[%s]\n", now.SetTimezone(carbon.EST))
log.Printf(" EST String() now=[%s]\n", now.String())
log.Printf(" EST ToString() now=[%s]\n", now.ToString())
log.Printf(" EST ToDateTimeString() now=[%s]\n", now.ToDateTimeString())
}
Version 2.6.0
package main
import (
"log"
"time"
"github.com/dromara/carbon/v2"
)
func main() {
log.SetFlags(0)
log.Printf("***** Using Go.Time\n")
// Gets the current time
t_now := time.Now()
// Get the current timezone location
location := t_now.Location()
// Print the current timezone name
log.Printf("Current Timezone[%s]\n", location.String())
log.Printf("Current Time[%s]\n", t_now)
log.Printf("***** Converting Go.Time -> Carbon\n")
var c carbon.Carbon = *carbon.NewCarbon(t_now)
log.Printf("carbon timezone[%s].\n", c.Timezone())
log.Printf("carbon IS08601 date/time[%s].\n", c.ToIso8601String())
log.Printf("carbon RFC3339 date/time[%s].\n", c.ToRfc3339String())
log.Printf("carbon IsDST[%v].\n", c.IsDST())
log.Printf("***** Using Carbon\n")
carbon.SetLayout(carbon.ISO8601Layout)
carbon.SetTimezone(carbon.UTC)
carbon.SetWeekStartsAt(carbon.Sunday)
carbon.SetLocale("en")
var now carbon.Carbon = *carbon.Now()
log.Printf(" UTC String() now=[%s]\n", now.String())
log.Printf(" UTC ToString() now=[%s]\n", now.ToString())
log.Printf(" UTC ToDateTimeString now=[%s]\n", now.ToDateTimeString())
log.Printf("Local now=[%s]\n", now.SetTimezone(carbon.Local))
log.Printf("Local String() now=[%s]\n", now.String())
log.Printf("Local ToString() now=[%s]\n", now.ToString())
log.Printf("Local ToDateTimeString() now=[%s]\n", now.ToDateTimeString())
log.Printf(" EST now=[%s]\n", now.SetTimezone(carbon.EST))
log.Printf(" EST String() now=[%s]\n", now.String())
log.Printf(" EST ToString() now=[%s]\n", now.ToString())
log.Printf(" EST ToDateTimeString() now=[%s]\n", now.ToDateTimeString())
}
The output for each program is as follows...
Version 2.5.4
***** Using Go.Time
Current Timezone[Local]
Current Time[2025-03-26 12:20:46.4571965 -0400 EDT m=+0.000508701]
***** Converting Go.Time -> Carbon
carbon timezone[EDT].
carbon IS08601 date/time[2025-03-26T12:20:46-04:00].
carbon RFC3339 date/time[2025-03-26T12:20:46-04:00].
carbon IsDST[true].
***** Using Carbon
UTC String() now=[2025-03-26 12:20:46]
UTC ToString() now=[2025-03-26 12:20:46.4587764 -0400 EDT]
UTC ToDateTimeString now=[2025-03-26 12:20:46]
Local now=[2025-03-26 12:20:46]
Local String() now=[2025-03-26 12:20:46]
Local ToString() now=[2025-03-26 12:20:46.4587764 -0400 EDT]
Local ToDateTimeString() now=[2025-03-26 12:20:46]
EST now=[2025-03-26 11:20:46]
EST String() now=[2025-03-26 12:20:46]
EST ToString() now=[2025-03-26 12:20:46.4587764 -0400 EDT]
EST ToDateTimeString() now=[2025-03-26 12:20:46]
Vs
Version 2.6.0
***** Using Go.Time
Current Timezone[Local]
Current Time[2025-03-26 12:21:47.744579 -0400 EDT m=+0.000558001]
***** Converting Go.Time -> Carbon
carbon timezone[Local].
carbon IS08601 date/time[2025-03-26T12:21:47-04:00].
carbon RFC3339 date/time[2025-03-26T12:21:47-04:00].
carbon IsDST[true].
***** Using Carbon
UTC String() now=[2025-03-26T16:21:47+00:00]
UTC ToString() now=[2025-03-26 16:21:47.7451059 +0000 UTC]
UTC ToDateTimeString now=[2025-03-26 16:21:47]
Local now=[2025-03-26T16:21:47+00:00]
Local String() now=[2025-03-26T16:21:47+00:00]
Local ToString() now=[2025-03-26 16:21:47.7451059 +0000 UTC]
Local ToDateTimeString() now=[2025-03-26 16:21:47]
EST now=[2025-03-26T11:21:47-05:00]
EST String() now=[2025-03-26T11:21:47-05:00]
EST ToString() now=[2025-03-26 11:21:47.7451059 -0500 EST]
EST ToDateTimeString() now=[2025-03-26 11:21:47]
As you might have notices, the EST times are off by 1 hour between the two versions. Version 2.5.4 says -0400 EST, while version 2.6.0 says -0500 EST. Is there something I am not doing correctly, or is this an issue in the library? Again, thanks for the library, I greatly appreciate it.
Metadata
Metadata
Assignees
Labels
QuestionIndicates that an issue, pull request, or discussion needs more informationIndicates that an issue, pull request, or discussion needs more information