Как разделить значение столбца DATETIME на день, месяц и год в C # - PullRequest
0 голосов
/ 20 июля 2011

В моей базе данных есть столбец DATETIME.Мне нужно получить значение и разделить его на 3 переменные, каждая из которых имеет год, месяц и день

Я пытаюсь сделать

dataadapter.Fill(dataset, "tablename");
string x;  
foreach(DataRow dd in dataset.Tables["tablename"].Rows)
{
    x = dataset.Tables["tablename"].Rows[0]["date1"].ToString();
}

здесь х содержит все м / д/ год и время, но как мне теперь иметь 3 переменные, которые могут хранить месяц в a, год в b и день в другой переменной c?

Ответы [ 7 ]

4 голосов
/ 20 июля 2011

Как насчет этого?

int year, month, day;
DateTime all;

if(DateTime.TryParse(dataset.Tables["tablename"].Rows[0]["date1"], out all)
{
    year = all.Year;
    month = all.Month;
    day = all.Day;
}
2 голосов
/ 20 июля 2011
foreach(DataRow dd in dataset.Tables["tablename"].Rows)
{
    var date = DateTime.Parse(dd["date1"].ToString());
    int day = date.Day;
    int month = date.Month;
    int year = date.Year;
    // Do something with it
}
1 голос
/ 20 июля 2011
DateTime dt = DateTime.Parse(x);
int day = dt.Day;
int month = dt.Month;
int year = dt.Year;
0 голосов
/ 20 июля 2011

Некоторые параметры:

  1. Вы можете разбить его на составные части в SQL:

    select yyyy = year(  t.some_datetime ) , -- integer year
           mm   = month( t.some_datetime ) , -- integer month (1-12)
           dd   = day(   t.some_datetime ) , -- integer day (1-31)
    from dbo.some_table t
    
  2. Вы можете преобразовать его встрока ISO 8601 фиксированной длины (легко анализировать, правильно сопоставлять), опять же в SQL:

    select charDate = convert(char(10),t.some_datetime,126) -- 'yyyy-mm-dd'
    from dbo.some_table t
    

    Разбор компонентов - это простая операция с подстрокой.

  3. Asотмеченные другими: просто выберите значение даты и времени.ADO.Net отображает это на System.DateTime.

    using System;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace ConsoleApplication4
    {
        class Program
        {
          static void Main( string[] args )
          {
            string myConnectString = GetConnectionString() ; // your connect string here!
            using ( SqlConnection dbConnection = new SqlConnection( myConnectString ) )
            using ( SqlCommand    sql          = dbConnection.CreateCommand() )
            {
              sql.CommandType = CommandType.Text ;
              sql.CommandText = @"
    select t.some_datetime
    from dbo.some_table t
    " ;
              dbConnection.Open() ;
              using ( SqlDataReader reader = sql.ExecuteReader() )
              {
                while ( reader.Read() )
                {
                  DateTime someDateTime = reader.GetDateTime(0) ;
                  process( someDateTime.Year , someDateTime.Month , someDateTime.Day ) ;
                }
              }
              dbConnection.Close() ;
            }
    
            return ;
          }
    
          private static void process( int p , int p_2 , int p_3 )
          {
            throw new NotImplementedException();
          }
    
        }
    }
    
0 голосов
/ 20 июля 2011

Полагаю, что лучшим способом было бы создать SQL-запрос, который получит для вас нужные компоненты даты, а затем заполнить данные из этого запроса, а не из самой таблицы.

Таким образом, вы узнаете некоторые функции обработки дат в SQL, кстати ...:)

0 голосов
/ 20 июля 2011
DateTime x;  
foreach(DataRow dd in dataset.Tables["tablename"].Rows)
{
  x = DateTime.Parse(dataset.Tables["tablename"].Rows[0]["date1"].ToString());
}

Тогда вам не нужно хранить 3 отдельные переменные, у вас будет x как DateTime, поэтому вы можете просто вызвать x.Year, x.Month, x.Date (Вы все равно можете назначить его на 3 разные переменные, если хотите)

0 голосов
/ 20 июля 2011

Каков тип данных поля в базе данных?

Если поле вашей базы данных является строкой, вам придется ее анализировать, в противном случае вы можете просто привести ее к DateTime:

// Parse it (be careful, could throw an exception)
DateTime date = DateTime.Parse(dataset.Tables["tablename"].Rows[0]["date1"].ToString());

// Or cast it:
DateTime date = (DateTime)dataset.Tables["tablename"].Rows[0]["date1"];

// Then pull out the values you wish to use from the date object
int months = date.Month;
int day = date.Day;
int year = date.Year;
...