首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateTimeFormatInfo.DayNames在Android上返回额外的空日期名称。

DateTimeFormatInfo.DayNames在Android上返回额外的空日期名称。
EN

Stack Overflow用户
提问于 2019-09-19 09:55:33
回答 1查看 139关注 0票数 1

我得到了下面的文化列表,我想以它们各自的语言获取日期名称

代码语言:javascript
复制
CultureInfo[] newCultures = {new CultureInfo("de-DE"),
                             new CultureInfo("en-US"),
                             new CultureInfo("en-GB"),
                             new CultureInfo("es-ES"),
                             new CultureInfo("fr-FR"),
                             new CultureInfo("nl-NL")};

我循环遍历他们所有的DateTimeFormat.DayNames并打印出来

代码语言:javascript
复制
foreach (CultureInfo culture in newCultures)
{
   foreach (string day in culture.DateTimeFormat.DayNames)
   {
       Debug.Log(culture.Name + ": " + day);
   }
   Debug.Log("----------------");
}

在Windows 10上使用Unity2019.1.8f1、Mono .NET 4.x运行时等效的编辑器中运行此操作时,IL2CPP脚本后端按预期执行,并在控制台中打印sun -> sat (包括)的一整天名称。

不过,当我为Android构建时,事情就开始变得混乱起来。

但是,当在Android上运行完全相同的代码(在Android7.0和Android9.0上都进行了测试)时,结果是不同的。

不只是打印日太阳-> sat (包括),它有第8项的每一种语言。那是空的。

代码语言:javascript
复制
en-GB: Sunday
en-GB: Monday
en-GB: Tuesday
en-GB: Wednesday
en-GB: Thursday
en-GB: Friday
en-GB: Saturday
en-GB: <blank>

我用了一堆语言(de-DE,en-US,en-EN,es-ES,fr-FR,nl-NL),它们都产生了第8天的空白。

然而,它并不仅仅止于此。当我循环通过CultureInfo.CurrentCulture时,八天就不存在了。

代码语言:javascript
复制
foreach (string day in CultureInfo.CurrentCulture.DateTimeFormat.DayNames)
{
   Debug.Log(CultureInfo.CurrentCulture.Name + ": " + day);
}
//Results
//en-GB: Sunday
//en-GB: Monday
//en-GB: Tuesday
//en-GB: Wednesday
//en-GB: Thursday
//en-GB: Friday
//en-GB: Saturday

另外,为了使用new CultureInfo,我尝试了使用CultureInfo.CreateSpecificCulture,但是这产生了相同的结果,即额外的第8天,空一天。

代码语言:javascript
复制
CultureInfo[] createCultures = {CultureInfo.CreateSpecificCulture("de-DE"),
                                CultureInfo.CreateSpecificCulture("en-US"),
                                CultureInfo.CreateSpecificCulture("en-GB"),
                                CultureInfo.CreateSpecificCulture("es-ES"),
                                CultureInfo.CreateSpecificCulture("fr-FR"),
                                CultureInfo.CreateSpecificCulture("nl-NL")};

foreach (CultureInfo culture in createCultures)
{
    foreach (string day in culture.DateTimeFormat.DayNames)
    {
        Debug.Log(culture.Name + ": " + day);
    }
    Debug.Log("----------------");
}

这是预期的行为吗?如果是这样的话,为什么第八天是空的?有没有办法不包括这一天,而不必在事后将其移除?

这似乎是一个问题,只有在与Android (或者modified的特定版本使用,但我无法确定他们到底使用哪个版本,并认为它是一个修改的版本)的联合使用。

我在Visual中为Android应用程序构建了一个新的空Xamarin,它没有问题(mono version: --version Mono JIT compiler version 5.18.0 (Visual Studio built mono))

MainActivity.cs:

代码语言:javascript
复制
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
    CultureInfo[] newCultures = {new CultureInfo("de-DE"),
                                 new CultureInfo("en-US"),
                                 new CultureInfo("en-GB"),
                                 new CultureInfo("es-ES"),
                                 new CultureInfo("fr-FR"),
                                 new CultureInfo("nl-NL")};

    List<string> results = new List<string>();

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);

        TextView text;

        text = FindViewById<TextView>(Resource.Id.textView1);

        foreach (CultureInfo culture in newCultures)
        {
            foreach (string day in culture.DateTimeFormat.DayNames)
            {
                results.Add(culture.Name + ": " + day + "\n");
                text.Text += culture.Name + ": " + day + "\n";
            }
            text.Text += "--------\n";
        }

        //text.Text = results.;

    }
}

Activity_main.axml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:text="Text"
        android:textSize="5sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="25px"
        android:minHeight="25px"
        android:id="@+id/textView1" />
</LinearLayout>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-19 13:53:57

它似乎是Unity2019.x的IL2CPP脚本后端中的一个bug (在2019.1.8和2019.2.5上测试过)。将脚本后端设置为Mono解决了这个问题。我会用它做一个错误报告。

这个bug并不仅仅局限于Android和工作日。当试图获取月份的名称时,这还将包括末尾的空条目,从而导致一年有13个月。在使用月份时,Windows的构建也会受到影响,CurrentCulture也会受到影响。

奇怪的是,平日没有在窗口或使用CurrentCulture时显示这种行为。

缩写版本的行为方式与它们的非简略版本相同。

为it做了一个展示回购的这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58008385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档