C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.91267 の関連記事表示

<< 0 >>
■91267  Re[2]: XMLファイルから一致するデータを取得する方法
□投稿者/ 河童 -(2019/06/09(Sun) 23:05:40)
    Hongliang さん、お返事ありがとうございます。
    
    処理が混雑していますが、何とかできたと思います。
    
    和暦に変換する日付が、どの和暦の期間に入るかの
    判定と期間の終了日がないときの判定も併せると混乱してしまします。
    
    和暦略称が代入されたときを判定基準にしています。
    ・和暦期間の開始日と比較 
    ・和暦期間の終了日と比較
    
    比較時に和暦略称を代入したり、リセットしたりしています。
    
    もう少しわかりやすい処理や考え方あれば、勉強したいです。
    先生方はどのように処理されるのでしょうか。
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <wareki>
      <data>
        <era_name>Meiji</era_name>
        <era_ryaku>M</era_ryaku>
        <era_start>18680125</era_start>
        <era_end>19120729</era_end>
      </data>
      <data>
        <era_name>Taisho</era_name>
        <era_ryaku>T</era_ryaku>
        <era_start>19120730</era_start>
        <era_end>19261224</era_end>
      </data>
      <data>
        <era_name>Showa</era_name>
        <era_ryaku>S</era_ryaku>
        <era_start>19261225</era_start>
        <era_end>19890107</era_end>
      </data>
      <data>
        <era_name>Heisei</era_name>
        <era_ryaku>H</era_ryaku>
        <era_start>19890108</era_start>
        <era_end>20190430</era_end>
      </data>
      <data>
        <era_name>Reiwa</era_name>
        <era_ryaku>R</era_ryaku>
        <era_start>20190501</era_start>
        <era_end></era_end>
      </data>
    </wareki>
    
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml.Linq;
    
    namespace ERA
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                //DateTime dt = DateTime.Now;
    
                string strTime = "1989/01/07 1:10:50";
                DateTime dt = DateTime.Parse(strTime);
    
                string era = getChangeEra(dt);
                
                
                MessageBox.Show(era, "和暦変換");
    
            }
    
            #region 西暦から和暦に変換する
            //************************************************
            // 和暦の形式(R1.5月)
            // 変換できない場合は空白とする
            // 明治元年(1868年1月25日)	明治45年(1912年7月29日)
            // 大正	元年(1912年7月30日)	15年(1926年12月24日)
            // 昭和	元年(1926年12月25日)	64年(1989年1月7日)
            // 平成	元年(1989年1月8日)	31年(2019年4月30日)
            // 令和 元年(2019年5月1日)	未定
            //************************************************
            private static string getChangeEra(DateTime pDate)
            {
    
                string EraName = "";
    
                try
                {
    
                    // 日時から日付のみ取得
                    DateTime wdate = pDate.Date;
    
                    // XML ロード
                    var table = XDocument.Load(@"C:\era.xml").Element("wareki");
    
                    string era_name = "";
                    string era_ryaku = "";
                    string era_start = "";
                    string era_end = "";
    
                    foreach (var row in table.Elements("data"))
                    {
                        // XMLのデータをセット
                        era_name = row.Element("era_name").Value;
                        era_ryaku = row.Element("era_ryaku").Value;
                        era_start = row.Element("era_start").Value;
                        era_end = row.Element("era_end").Value;
    
                        // 開始日が空白なら読み飛ばし
                        if (era_start != "")
                        {
                            DateTime? e_start = null; // Null許容型
                            // 和暦の開始日を日付型に変換
                            e_start = DateTime.ParseExact(era_start, "yyyyMMdd", null);
    
                            // 日付がera_start以上なら、和暦略称を代入
                            if (e_start <= wdate)
                            {
                                EraName = era_ryaku;
                            }
                            else
                            {
                                EraName = "";
                            }
                            
                            // 和暦の終了日の有無
                            DateTime? e_end = null; // Null許容型
                            if (era_end != "")
                            {
                                // 和暦の終了日を日付型に変換
                                e_end = DateTime.ParseExact(era_end, "yyyyMMdd", null);
    
                                // 日付がera_end以下なら、和暦略称を代入
                                if (e_end >= wdate)
                                {
                                    EraName = era_ryaku;
                                }
                                else // 日付がera_end以上なら、和暦略称をリセット
                                {
                                    EraName = "";
                                }
                            }
    
                        }
    
                        // 和暦略称が入力された場合は、繰り返し中断
                        if (EraName != "")
                        {
                            // 西暦から和暦の年を取得
                            int era_year = pDate.Year - int.Parse(era_start.Substring(0, 4)) + 1;
                            // 月を取得
                            string era_month = pDate.Month.ToString();
                            // 和暦へ変換
                            EraName = era_ryaku + era_year.ToString() + "." + era_month + "月";
    
                            break;
                        }
     
                    }
    
                }
                catch (FormatException)
                {
                    EraName = "";
                }
    
                return EraName;
    
            }
            #endregion
記事No.91261 のレス /過去ログ157より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -