github.com/alibabacloud-go/tea@v1.3.10/dara/date_test.go (about)

     1  package dara
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  )
     7  
     8  func TestConstructWithNow(t *testing.T) {
     9  	date := &Date{date: time.Now()}
    10  	currentTime := time.Now()
    11  	if currentTime.Format("2006-01-02 15:04:05") != date.Format("yyyy-MM-dd hh:mm:ss") {
    12  		t.Errorf("Expected %v, got %v", currentTime.Format("2006-01-02 15:04:05"), date.Format("yyyy-MM-dd hh:mm:ss"))
    13  	}
    14  }
    15  
    16  func TestConstructWithDateTimeString(t *testing.T) {
    17  	datetime := "2023-03-01T12:00:00Z" // Use RFC3339 format
    18  	date, err := NewDate(datetime)
    19  	if err != nil {
    20  		t.Fatalf("Expected no error, got %v", err)
    21  	}
    22  	if datetime != date.Format("yyyy-MM-ddThh:mm:ssZ") {
    23  		t.Errorf("Expected %v, got %v", datetime, date.Format("yyyy-MM-ddThh:mm:ssZ"))
    24  	}
    25  }
    26  
    27  func TestConstructWithWrongType(t *testing.T) {
    28  	_, err := NewDate("20230301 12:00:00 +0000 UTC")
    29  	if err == nil {
    30  		t.Errorf("Expected error, but got nil")
    31  	}
    32  }
    33  
    34  func TestConstructWithUTC(t *testing.T) {
    35  	datetimeUTC := "2023-03-01T12:00:00Z"
    36  	dateWithUTC, err := NewDate(datetimeUTC)
    37  	if err != nil {
    38  		t.Fatalf("Expected no error, got %v", err)
    39  	}
    40  
    41  	referenceDateTime, _ := time.Parse(time.RFC3339, datetimeUTC)
    42  	if referenceDateTime.Unix() != dateWithUTC.Unix() {
    43  		t.Errorf("Expected %v, got %v", referenceDateTime.Unix(), dateWithUTC.Unix())
    44  	}
    45  
    46  	formattedDateTime := dateWithUTC.UTC()
    47  	expectedFormattedDateTime := referenceDateTime.UTC().Format("2006-01-02 15:04:05.000000000 -0700 MST")
    48  	if formattedDateTime != expectedFormattedDateTime {
    49  		t.Errorf("Expected %v, got %v", expectedFormattedDateTime, formattedDateTime)
    50  	}
    51  }
    52  
    53  func TestFormat(t *testing.T) {
    54  	datetime := "2023-03-01T12:00:00Z"
    55  	date, _ := NewDate(datetime)
    56  	expected := "2023-03-01 12:00 PM"
    57  	if result := date.Format("yyyy-MM-dd hh:mm a"); result != expected {
    58  		t.Errorf("Expected %v, got %v", expected, result)
    59  	}
    60  }
    61  
    62  func TestUTC(t *testing.T) {
    63  	datetime := "2023-03-01T12:00:00+08:00"
    64  	date, _ := NewDate(datetime)
    65  	expected := "2023-03-01 04:00:00.000000000 +0000 UTC"
    66  	if result := date.UTC(); result != expected {
    67  		t.Errorf("Expected %v, got %v", expected, result)
    68  	}
    69  }
    70  
    71  func TestUnix(t *testing.T) {
    72  	datetime := "1970-01-01T00:00:00Z"
    73  	date, _ := NewDate(datetime)
    74  	if result := date.Unix(); result != 0 {
    75  		t.Errorf("Expected 0, got %v", result)
    76  	}
    77  
    78  	datetime = "2023-12-31T08:00:00+08:00"
    79  	date, _ = NewDate(datetime)
    80  	if result := date.Unix(); result != 1703980800 {
    81  		t.Errorf("Expected 1703980800, got %v", result)
    82  	}
    83  }
    84  
    85  func TestAddSub(t *testing.T) {
    86  	datetime := "2023-03-01T12:00:00Z"
    87  	date, _ := NewDate(datetime)
    88  	date = date.Add(1, "day")
    89  	expectedDate := time.Date(2023, 3, 2, 12, 0, 0, 0, time.UTC)
    90  	if date.date != expectedDate {
    91  		t.Errorf("Expected %v, got %v", expectedDate, date.date)
    92  	}
    93  	date = date.Sub(1, "day") // Subtract 1 day
    94  	expectedDate = time.Date(2023, 3, 1, 12, 0, 0, 0, time.UTC)
    95  	if date.date != expectedDate {
    96  		t.Errorf("Expected %v, got %v", expectedDate, date.date)
    97  	}
    98  }
    99  
   100  func TestDiff(t *testing.T) {
   101  	datetime1 := "2023-03-01T12:00:00Z"
   102  	datetime2 := "2023-04-01T12:00:00Z"
   103  	date1, _ := NewDate(datetime1)
   104  	date2, _ := NewDate(datetime2)
   105  	diffInSeconds := date1.Diff("seconds", date2)
   106  	if diffInSeconds != -31*24*60*60 {
   107  		t.Errorf("Expected %v, got %v", -31*24*60*60, diffInSeconds)
   108  	}
   109  }
   110  
   111  func TestHourMinuteSecond(t *testing.T) {
   112  	datetime := "2023-03-01T12:34:56Z"
   113  	date, _ := NewDate(datetime)
   114  	if result := date.Hour(); result != 12 {
   115  		t.Errorf("Expected 12, got %d", result)
   116  	}
   117  	if result := date.Minute(); result != 34 {
   118  		t.Errorf("Expected 34, got %d", result)
   119  	}
   120  	if result := date.Second(); result != 56 {
   121  		t.Errorf("Expected 56, got %d", result)
   122  	}
   123  }
   124  
   125  func TestMonthYearDay(t *testing.T) {
   126  	datetime := "2023-03-01T12:00:00Z"
   127  	date, _ := NewDate(datetime)
   128  	if result := date.Month(); result != 3 {
   129  		t.Errorf("Expected 3, got %d", result)
   130  	}
   131  	if result := date.Year(); result != 2023 {
   132  		t.Errorf("Expected 2023, got %d", result)
   133  	}
   134  	if result := date.DayOfMonth(); result != 1 {
   135  		t.Errorf("Expected 1, got %d", result)
   136  	}
   137  }
   138  
   139  func TestDayOfWeekWeekOfYear(t *testing.T) {
   140  	datetime := "2023-03-01 00:00:00"
   141  	date, _ := NewDate(datetime)
   142  	if result := date.DayOfWeek(); result != 3 {
   143  		t.Errorf("Expected 3, got %d", result)
   144  	}
   145  	if result := date.WeekOfYear(); result != 9 {
   146  		t.Errorf("Expected 9, got %d", result)
   147  	}
   148  
   149  	datetime1 := "2023-12-31T12:00:00Z"
   150  	date1, _ := NewDate(datetime1)
   151  	if result := date1.DayOfMonth(); result != 31 {
   152  		t.Errorf("Expected 31, got %d", result)
   153  	}
   154  	if result := date1.DayOfWeek(); result != 7 {
   155  		t.Errorf("Expected 7, got %d", result)
   156  	}
   157  	if result := date1.WeekOfYear(); result != 52 {
   158  		t.Errorf("Expected 52, got %d", result)
   159  	}
   160  }