为什么我不能在 datetime Flutter 项目中添加偏移时间?

问题描述 投票:0回答:3

我现在尝试向我的日期时间对象添加偏移时间, 但它没有显示实际时间的增加时间。 这是我在 android studio 中的 flutter 项目。

    void getTime() async {
    Response response = await
    get('http://worldtimeapi.org/api/timezone/Asia/Karachi');
    Map data = jsonDecode(response.body);
    String datetime = data['datetime'];
    String offset = data['utc_offset'].substring(1,3);

    print(offset);
    DateTime now = DateTime.parse(datetime);
    now.add(Duration(hours: int.parse('offset')));
    print(now);
    }
    @override
    void initState() {
    super.initState();
    getTime();
    }

这是我得到的结果: Screenshot of the output

android flutter android-studio datetime datetimeoffset
3个回答
0
投票

你的代码有两个问题:

  1. 您应该将
    offset
    传递给 int.parse 而不是
    'offset'
  2. add
    是对
    DateTime
    对象的不可变操作。它不会更改
    DataTime
    对象,但会返回一个新对象。

试试这个:

DateTime dateTimeAfterOffset = DateTime.parse(datetime).add(
  Duration(
    hours: int.parse(offset),
  ),
);
```

0
投票

我找到了解决方案。耶耶耶!

  void getTime() async {

    //Make the request
    Response response = await get('http://worldtimeapi.org/api/timezone/Asia/Karachi');
    Map data = jsonDecode(response.body);
    print(data);


    //Get properties from data
    String datetime = data['datetime'];
    String offset = data['utc_offset'].substring(1,3);
    //print(datetime);
    print(offset);

    //create DateTime Object
    DateTime now = DateTime.parse(datetime);
    now = now.add(Duration(hours: int.parse(offset)));
    print(now);
  }

  @override
  void initState() {

    super.initState();
    getTime();
  }

0
投票

但是下面的示例代码会帮助您进行任何类型的偏移

void getTime() async {
    var httpsUri = Uri(
        scheme: 'http',
        host: 'worldtimeapi.org',
        path: '/api/timezone/Asia/Kolkata');

    Response response = await get(httpsUri);
    Map data = jsonDecode(response.body);
    //print('data is ${response.body}');
    //get properties from data
    String dateTime = data['datetime'];
    String offset = data['utc_offset'];
    offset = offset.replaceAll("+", "");

    /// String offset1 = data['utc_offset'].substring(1, 3);
    print('date=>$dateTime,offset=>$offset');

    //date time object
    DateTime now = DateTime.parse(dateTime);
    print('Final date before:$now');
    now = now.add(Duration(
        hours: int.parse(offset.split(':')[0]),
        minutes: int.parse(offset.split(':')[1])));
    print('Final date after:$now');
}
© www.soinside.com 2019 - 2024. All rights reserved.