2 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
Go 使用 RFC 3339 編碼時(shí)間,如果你控制正在生成的 json,你只需要更改2022-04-03T00:00:00.000為2022-04-03T00:00:00.000Z.
例如,這有效。
type Contract struct {
ContractId *int `json:"contract_id"`
CompanyId *int `json:"company_id"`
DateEstablished *time.Time `json:"date_established"`
ExpiryDate *time.Time `json:"expiry_date"`
ExtensionExpiryDate *time.Time `json:"extension_expiry_date"`
Description *string `json:"description"`
}
func main() {
body := `{"contract_id":0,"date_established":"2022-04-03T00:00:00.000Z","expiry_date":null,"extension_expiry_date":null,"description":"fffff"}`
var contract Contract
reader := strings.NewReader(body)
decoder := json.NewDecoder(reader)
err := decoder.Decode(&contract)
if err != nil {
fmt.Println("Error: ", err)
} else {
fmt.Printf("Contract: %+v\n", contract)
}
}
如果你不控制json,你需要寫(xiě)一個(gè)自定義的解組方法。

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是我最終在 Flutter 中使用我的 Go api 和列類(lèi)型以及在 Postgresql 中實(shí)現(xiàn)pgtype.Date的pgtype.DateTimestamptz解決DATE方案DATETIME。我無(wú)法使用具有這種數(shù)據(jù)類(lèi)型的指針。
首先,我在 Flutter 中創(chuàng)建了一個(gè)這樣的助手:
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
extension DateTimeExtension on DateTime {
String format([String pattern = 'dd/MM/yyyy', String? locale]) {
if (locale != null && locale.isNotEmpty) {
initializeDateFormatting(locale);
}
return DateFormat(pattern, locale).format(this);
}
String formatDbDateTime(
[String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", String? locale]) {
if (locale != null && locale.isNotEmpty) {
initializeDateFormatting(locale);
}
return DateFormat(pattern, locale).format(this);
}
String formatDbDate([String pattern = 'yyyy-MM-dd', String? locale]) {
if (locale != null && locale.isNotEmpty) {
initializeDateFormatting(locale);
}
return DateFormat(pattern, locale).format(this);
}
String formatLocalDate([String pattern = 'dd MMMM yyyy', String? locale]) {
if (locale != null && locale.isNotEmpty) {
initializeDateFormatting(locale);
}
return DateFormat(pattern, locale).format(this);
}
String formatLocalDateTime(
[String pattern = 'dd MMMM yyyy h:mm a', String? locale]) {
if (locale != null && locale.isNotEmpty) {
initializeDateFormatting(locale);
}
return DateFormat(pattern, locale).format(this);
}
}
我在我的 Flutter 模型中使用它來(lái)格式化我的 Go Api 的日期:
if (planAcceptedDate != null) {
data['plan_accepted_date'] = planAcceptedDate!.formatDbDateTime();
} else {
data['plan_accepted_date'] = null;
}
if (invoiceDate != null) {
data['invoice_date'] = invoiceDate!.formatDbDate();
} else {
data['invoice_date'] = null;
}
在我的 Flutter 視圖表單中,我這樣使用它:
Container(
padding: EdgeInsets.all(8.0),
child: Text(
_matter.planAcceptedDate == null
? ''
: _matter.planAcceptedDate!.formatLocalDateTime(),
style: TextStyle(
color: appTextColor,
fontWeight: FontWeight.normal,
fontSize: _user.fontsize,
),
),
),
Container(
padding: EdgeInsets.all(8.0),
child: Text(
_matter.invoiceDate == null
? ''
: _matter.invoiceDate!.formatLocalDate(),
style: TextStyle(
color: appTextColor,
fontWeight: FontWeight.normal,
fontSize: _user.fontsize,
),
),
),
我的 Go 結(jié)構(gòu)如下所示:
PlanAcceptedDate pgtype.Timestamptz `json:"plan_accepted_date"`
InvoiceDate pgtype.Date `json:"invoice_date"`
- 2 回答
- 0 關(guān)注
- 152 瀏覽
添加回答
舉報(bào)