none
Конвертация date из mysql в date xml RRS feed

  • Вопрос

  • Привет. Такая проблема есть в mysql таблица, с полем дата в формате date (например, 2007-02-04). Я через программу (С#) импортирую эту таблицу из mysql в xml, но там эта дата отображается как 2007-02-04T00:00:00+03:00. В чем проблема? Прошу помощи...
    16 марта 2012 г. 14:28

Ответы

Все ответы

  • > импортирую эту таблицу из mysql в xml, но там эта дата отображается как 2007-02-04T00:00:00+03:00. В чем проблема?


    это такой формат: дата+время+часовой пояс.
    если изменить код импортирующей программы невозможно, то можно изменить xml.
    как вариант, см. XStreamingElement  
     
      
    16 марта 2012 г. 15:05
  • А можно ли в mysql отключить отображение часового пояса?

    CREATE TABLE `HR`.`Date` (

      `iddate` int(11) NOT NULL,
      `date_reception` date,
      `date_service` date,
      `date_nepreriv_service` date,
      `date_contract` date,
      `staff_date` int(11) NOT NULL,
       PRIMARY KEY (`iddate`)

    Вот таким образом я импортирую эту таблицу из mysql в xml:

    public MySqlConnection myConnection;
    string conn = "Database=HR;Data Source=localhost;User Id=root;Password=root;";
    
    MySqlConnection connection = new MySqlConnection(conn);
    MySqlDataAdapter date = new MySqlDataAdapter("select Staff_date, date_reception, date_service, date_nepreriv_service, date_contract from date", connection);
    
    connection.Open();
    	DataSet date_ds = new DataSet("date_table");
    	date.Fill(date_ds, "date");
    connection.Close();
    
    date_ds.WriteXml("d:\\staff_data\\date.xml", XmlWriteMode.IgnoreSchema);

    Приведите пример использования XStreamingElement...




    • Изменено vantur 16 марта 2012 г. 15:28
    16 марта 2012 г. 15:18
  • > А можно ли в mysql отключить отображение часового пояса?
     
      
    в запросе вместо "select date_service ..." укажите "select CONVERT(varchar(10), date_service,101) ..." - это работает в sql server; возможно что и в mysql также.

       


    • Предложено в качестве ответа Malobukv 16 марта 2012 г. 15:59
    • Изменено Malobukv 16 марта 2012 г. 16:00
    16 марта 2012 г. 15:59
  • в mysql есть такая возможность, но пишет что синтаксическая ошибка select CONVERT(varchar (10), Staff_date) :
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Staff_date)
    from `hr`.`date`' at line 1
    17 марта 2012 г. 10:40
  • > в mysql есть такая возможность, но пишет что синтаксическая ошибка 
     
     
    если на стороне бд не получается, то можно изменить значение в момент записи в файл.
    для этого надо создать наследника XmlTextWriter. примерно так:
       
    using System;
    using System.Data;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                // создать DataSet
                var dt = new DataTable("dates");
                dt.Columns.Add("date", typeof(DateTime));
                dt.Columns.Add("value", typeof(string));
                var ds = new DataSet("org");
                ds.Tables.Add(dt);
                dt.Rows.Add(DateTime.Now, "v");
    
                // сохранить DataSet в xml
                using(var x = new XmlWriter("result.xml"))
                    ds.WriteXml(x, XmlWriteMode.IgnoreSchema);
    
                new RichTextBox { Parent = this, Dock = DockStyle.Fill, Text = File.ReadAllText("result.xml") };
            }
    
            class XmlWriter : XmlTextWriter
            {
                public XmlWriter(string filename) : base(filename, Encoding.Default)
                {
                    this.Formatting = System.Xml.Formatting.Indented;
                }
                public override void WriteString(string text)
                {
                    DateTime d;
                    if(DateTime.TryParse(text, out d))
                        base.WriteString(d.ToShortDateString());
                    else
                        base.WriteString(text);
                }
            }
        }
    }
     
        
    18 марта 2012 г. 9:14
  • Здравсвтвуйте

    Попробуйте использовать следующую функцию mysql в select запросе для приведения нужного поля в желаемы формат - DATE_FORMAT(date,format). ожно посмотреть 6.3.4 Функции даты и времени

    Также смотрите на вариант программной конвертации формата перед экспортим в xml, который предложил Malobukv.


    Для связи [mail]

    • Помечено в качестве ответа vantur 19 марта 2012 г. 11:58
    19 марта 2012 г. 6:40