Javascript 某些设备中的时区错误-React Native

Javascript 某些设备中的时区错误-React Native,javascript,android,react-native,datetime,Javascript,Android,React Native,Datetime,我有一个react本机应用程序在各种设备上运行。无论我从new Date()或moment或任何其他库中使用时间或日期时间,某些设备都会在应用程序中显示错误的时间。就时区而言,实际设备时间是正确的,但即使设备中的时区设置正确(使用自动和手动设置的时区进行尝试),它也会在应用程序内以不同的时区显示不同的时间 我在stackoverflow上遇到了类似的问题,react native的git问题表示可以通过手动更新jsc android包来修复。我已经在应用程序中安装了最新版本的jsc androi

我有一个react本机应用程序在各种设备上运行。无论我从
new Date()
moment
或任何其他库中使用时间或日期时间,某些设备都会在应用程序中显示错误的时间。就时区而言,实际设备时间是正确的,但即使设备中的时区设置正确(使用自动和手动设置的时区进行尝试),它也会在应用程序内以不同的时区显示不同的时间

我在stackoverflow上遇到了类似的问题,react native的git问题表示可以通过手动更新jsc android包来修复。我已经在应用程序中安装了最新版本的jsc android,但也面临同样的问题。即使在最新版本的
react-native:0.61上也会出现这种情况

其中一款设备是Redmi Note 5(Android版本8.1.0)

这是一个示例应用程序的屏幕截图(请忽略橙色条纹),显示不正确的时区。实际时区为IST(印度标准时间)

您可以比较状态栏中的系统时间(上午11:21)应用程序时间(凌晨3:51)。

以下是上述输出的代码(App.js)


从“React”导入React;
进口{
看法
文本,
状态栏,
}从“反应本机”;
从“力矩”中导入力矩;
常量App=()=>{
返回(
时间:{时刻(新日期()).format(“h:mm A”)}
时间字符串:{new Date().toTimeString()}
时间偏移量:{new Date().getTimezoneOffset()}
静态时间(下午5:21):{时刻(新日期(“2019-09-23T11:51:29.184Z”)。格式(“h:MMA”)}
);
};
导出默认应用程序;

有什么建议吗?

每次我需要从某个位置获取正确的日期时,我都会使用此API:


也许它能帮助你

实际上,我在整个应用程序中都从
newdate()
moment
获得了日期和时间。因此,如果我需要更新这个API的代码,那么它将成为一个大的工作,因为日期和时间已经在很多地方使用。有没有其他方法可以找到这种情况是如何发生在某些设备或更改javascript的
new Date()
时区的位置上的?在更改系统时区后是否会发生这种情况?如果重新启动应用程序,或者重新启动整个设备,该怎么办?换句话说,它是否可能与您的应用程序(或其环境)缓存其首次加载的时区有关?@MattJohnson Pint,不,我只是检查了系统时区,并将其保留为默认时区。起初我没有改变时区。由于它没有按预期工作,我试着手动将时区设置为IST,但它也显示了错误的时间。这很奇怪。也许您可以向我们展示创建此示例应用程序的确切代码?这真的只是
new Date().toString()
?@MattJohnson Pint,我已经用代码更新了这个问题。不@HenriqueBruno,我没有使用jscFlavor Intl。我也会尝试这个解决方案。

    import React from 'react';
    import {
      View,
      Text,
      StatusBar,
    } from 'react-native';
    import moment from 'moment';
    
    const App = () => {  
      return (
        <View style={{flex: 1, justifyContent: 'center', alignItems: 'center' }}>
          <StatusBar barStyle="dark-content" />
          <Text>Time: {moment(new Date()).format("h:mm A")}</Text>
          <Text>Time String: {new Date().toTimeString()}</Text>
          <Text>Time Offset: {new Date().getTimezoneOffset()}</Text>
          <Text>Static Time (5:21 PM): {moment(new Date("2019-09-23T11:51:29.184Z")).format("h:mm A")}</Text>
        </View>
      );
    };
    
    export default App;