菜鸟教程小白 发表于 2022-12-11 16:40:24

ios - NSDateFormatter 意外调整时间的问题


                                            <p><p>在 Objective-C 中工作时,我有一种方法可以正确格式化从数据库中获取的日期。
数据库返回没有时区信息的日期和时间。例如“2016-06-07T09:29:50.253”。</p>

<p>问题在于它正确地获取了日期,然后将其调回了一个小时。对于我 09:29 的时间,我会以 08:29 结束。</p>

<p>我目前正在与 BST 合作。</p>

<p>我有以下代码:</p>

<pre><code>    +(NSDate *)getDate:(NSString *)date {

//Gets the date
      date = ;
      date = ;

//Formats the date
      NSDateFormatter *formatter = [ init];
//This line is the one that fixes it.
      ];
      ;

      NSDate*returnDate = ;
      return returnDate;
    }
</code></pre>

<p>我做了一些谷歌搜索,发现添加以下行可以解决问题。</p>

<pre><code>];
</code></pre>

<p>这暂时没问题,但我担心它会在夏令时再次中断,我不完全确定为什么会修复它。我还希望我能够让它适应不同的时区,但到目前为止还没有运气。</p>

<p>更多信息:</p>

<p>-日期来自 sql server 中的 getDate() 调用。我对此的理解是它按原样获取日期,不了解时区。如果我进行选择调用,我会得到结果:'2016-06-07T09:29:50.253'</p>

<p>要形式化问题:
<strong>为什么上面的代码会调整returnDate?</strong></p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>NSDate</code> 对象和它使用格式化程序的表示之间有一个重要的区别:</p>

<p><code>NSDate</code> 对象将始终与通用时间标准 (UTC) 相关。它忽略了夏令时和时区,这是您希望它存储在数据库中的方式(作为 UTC 时间戳)。 </p>

<p>当您使用格式化程序时,它通常用于向用户显示日期。因此,格式化程序将默认使用您当前设备的区域设置来表示日期,因此如果您的日期是 11:00 并且您处于没有夏令时的 +4 时区,您将获得的日期将是 15:00。如果有夏令时,时间会略有变化。您需要这种行为,因为这意味着无论您身在何处,用户都将始终获得他们正在查看的日期的正确相对时间。 </p>

<p>除非像您一样,您默认格式化程序使用“UTC”语言环境,不应与“+0”时区混淆。这就是为什么你得到不同的日期。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSDateFormatter 意外调整时间的问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37683301/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37683301/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSDateFormatter 意外调整时间的问题