У меня есть служба go, которая получает данные из внешней службы.
Данные выглядят следующим образом (json)-
{
"firstName": "XYZ",
"lastName": "ABC",
"createdAtTimestamp": "Mon Nov 21 2022 17:01:59 GMT+0530 (India Standard Time)"
}
Обратите внимание, что createdAtTimestamp — это вывод в формате nodeJS new Date().toString(), для которого не указан какой-либо конкретный формат RFC.
Как мне преобразовать createdAtTimestamp в time в go?
Я пробовал это, но это терпит неудачу -
data, _ := time.Parse(time.RFC1123, "Mon Nov 21 2022 17:01:59 GMT+0530 (India Standard Time)")
fmt.Println(data.Format(time.RFC3339))



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вам придется раздеться (India Standard Time) (если вы не знаете, что это будет каждый раз одно и то же), но вы можете сделать
https://go.dev/play/p/rWqO9W3laM2
str := "Mon Nov 21 2022 17:01:59 GMT+0530 (India Standard Time)"
data, err := time.Parse("Mon Jan 02 2006 15:04:05 MST-0700", str[:strings.Index(str, " (")])
fmt.Println(data.Format(time.RFC3339), err)
или, если у него всегда будет (India Standard Time), вы можете сделать:
str := "Mon Nov 21 2022 17:01:59 GMT+0530 (India Standard Time)"
data, err := time.Parse("Mon Jan 02 2006 15:04:05 MST-0700 (India Standard Time)", str)
fmt.Println(data.Format(time.RFC3339), err)
Вы можете использовать ниже Layout для анализа даты:
"Mon Jan 02 2006 15:04:05 MST-0700"
В строках:
date := "Mon Nov 21 2022 17:01:59 GMT+0530 (India Standard Time)"
data, err := time.Parse("Mon Jan 02 2006 15:04:05 MST-0700", strings.Split(date, " (")[0])
Вы видите time.RFC1123 в документации https://pkg.go.dev/time , на самом деле он не соответствует вашему формату. https://pkg.go.dev/time#pkg-constants.
Если вы знаете формат createdAtTimestamp, то сначала вам нужно определить макет с форматом.
package main
import (
"fmt"
"time"
)
func main() {
// The date and time string you want to parse
createdAtTimestamp := "Mon Nov 21 2022 17:01:59 GMT+0530 (India Standard Time)"
// The format of the date and time string
layout := "Mon Jan 02 2006 15:04:05 MST-0700 (India Standard Time)"
// Parse the date and time string
parsedTime, err := time.Parse(layout, createdAtTimestamp)
if err != nil {
fmt.Println(err)
return
}
// Print the parsed time in RFC3339 format
fmt.Println(parsedTime.Format(time.RFC3339))
}