NSDateFormatter输出从iPadOS 13到14的差异

问题描述

在iPadOS 13上,当用户将“ 24小时制”设置为FALSE时,以下代码将产生以下输出

代码

final String MovieMuamala = movieMuamala.getText().toString().trim();
            Muamala.addValueEventListener(new ValueEventListener() {
                @RequiresApi(api = Build.VERSION_CODES.O)
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    String pass = snapshot.child("muamala").getValue().toString();

                    if(MovieMuamala.equals(pass)) {



                        Toast.makeText(MovieDetails.this,"Pass Matched",Toast.LENGTH_LONG).show();
                        successNotification();


                        TextView subText = findViewById(R.id.sub_txt);
                        subText.setText(MovieMuamala);

                        
                    } else if (!MovieMuamala.equals(pass)){
                        Toast.makeText(MovieDetails.this,"Your Muamala Did not Match In Our Database",Toast.LENGTH_LONG).show();
                        
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });

输出

+ (Nsstring *)dateStringFromDate:(NSDate *)date {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
    return [dateFormatter stringFromDate:date];
}

但是,在iPadOS 14上,相同的代码会产生以下输出

2020-10-19T11:55:29Z

注意:在两个操作系统上,“ 24小时制”切换都设置为FALSE。出于某种原因,iPadOS 14似乎遵循NSDateFormatter中的AM / PM设置,但iPadOS 13则不这样做。

我知道将语言环境设置为此将完全删除AM / PM:

2020-10-19T12:38:06 p.m.Z

但是,我们试图理解为什么在iPad设置完全相同的情况下仅在iPadOS 14而不是13上出现问题。

解决方法

基金会的日期和时间API建立在Apple平台随附的ICU版本的基础上。在OS版本之间,Foundation和ICU代码都将接收更新,这些更新可以修复旧错误,并偶尔引入新错误。在任何API层上,这里的变化都已经体现出来(以及在该层是否被视为错误),您将看到代码已更改的结果。

这里的行为看起来不正确,但是幸运的是,void MainWindow::on_btnOpenFile_clicked() { auto path = QFileDialog::getOpenFileName(this,"Browse for a array object file..."); QFile file(path); // works fine if(file.exists(path) && file.open(QIODevice::ReadOnly)) { QTextStream stream(&file); QString xLine; QString yLine; QVector<QPointF> mPoints; while(!stream.atEnd()) { xLine = stream.readLine(); if(xLine.contains("x",Qt::CaseInsensitive)) { // Line has x in it yLine = stream.readLine(); // READ NEXT LINE!!!! } else { // Line is either Y or not a X line so we skip to next itteration continue; } // Debug the lines qDebug() << "X =" << xLine; qDebug() << "Y =" << yLine; // Parse and add the points to the array auto xConvResult = false; auto yConvResult = false; // To discard trailing ',' of the X line auto xValue = xLine.split(":")[1].split(",")[0].toDouble(&xConvResult); auto yValue = yLine.split(":")[1].toDouble(&yConvResult); if(xConvResult && yConvResult) { mPoints.push_back({xValue,yValue}); } } file.close(); } } 的语言环境(无论如何应该设置)可以解决问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...