【问题标题】:Insert Format of Date from DatePicker to SQL Server (datetime)从 DatePicker 向 SQL Server 插入日期格式(日期时间)
【发布时间】:2015-11-24 11:00:12
【问题描述】:

在我的 Android 应用程序中,我想将 DatePicker 中的日期插入 SQL Server DB。 SQL Server 中的日期类型是日期时间。 我可以像这样从 DatePicker 获取日、月和年:

                int day = datePicker.getDayOfMonth();
            int month = datePicker.getMonth();
            int year = datePicker.getYear();

但是我应该如何将它传递给 SQL Server 2012? 用什么格式?

【问题讨论】:

    标签: android sql-server datetime android-datepicker


    【解决方案1】:

    这取决于您要存储的数据库。如果您在本地存储在您的 sqlite 数据库中,我建议您以毫秒为单位存储日期,如果您存储在后端服务器中,您可以将其转换为 ISO 日期格式。下面给出了这两种方式的示例,如果您想要任何其他格式的日期,您也可以通过修改传递给 STANDARD_UI_DATE_FORMAT 对象的构造函数的字符串来实现。

    Calender startTimeCalender = Calendar.getInstance();    
    startTimeCalender.set(Calendar.YEAR, year);
    startTimeCalender.set(Calendar.MONTH, monthOfYear);
    startTimeCalender.set(Calendar.DAY_OF_MONTH, dayOfMonth);
    
    //Date in Millis
    lond dateInMillis = startTimeCalender.getTimeInMillis();
    
    SimpleDateFormat STANDARD_UI_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-ddTHH\:mm\:ss.fffffffzzz");
    
    //Date in ISO Format
    String formattedDate = STANDARD_UI_DATE_FORMAT.format(startTimeCalender.getTime())
    

    【讨论】:

    • 它不是本地数据库,它在另一个服务器中。我只需要日期,所以最好将数据库中的字段类型更改为日期,而不是时间。你认为使用日历更好吗?还是我必须这样做?
    • 如果您正在玩日期或时间或两者兼而有之,Calender 对象是最好的选择。而且我不确定您的服务器采用什么日期格式,但如果需要将其作为字符串发送,您可以使用上面的代码进行格式化。在我的应用程序中,我们使用 ISO 格式,因此我将其转换为 ISO 并将其作为字符串发送。
    • 您使用的 SimpleDateFormat 对我不起作用,我使用了这个: SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss.mmm");但是当我编译时,我在 catLog 中得到了这个错误: java.lang.NumberFormatException: Invalid int: "18 12:00:00.000" That 18 is the dayOfMonth and next is time.
    • 你能告诉我你用来格式化日期的代码吗,因为我想了解日历对象是如何出现的?
    • 日历 finalCalendar = Calendar.getInstance(); int fDay = datePicker2.getDayOfMonth(); int fMonth = datePicker2.getMonth(); int fYear = datePicker2.getYear(); finalCalendar.set(Calendar.YEAR, Integer.valueOf(fYear)); finalCalendar.set(Calendar.MONTH, Integer.valueOf(fMonth)); finalCalendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(fDay)); finalCalendar.set(Calendar.HOUR, 0); finalCalendar.set(Calendar.MINUTE, 0); finalCalendar.set(Calendar.SECOND, 0);
    【解决方案2】:

    您可以使用CONVERT() 函数在SQL Server 上将字符串(如himanshu1496 提供的示例)转换为有效的datetime 类型。

    只要你能把字符串值放到数据库中,你就可以这样做:

    SELECT 
       '2015-11-24 14:17:19' AS UnconvertedText,
       CAST('2015-11-24T14:17:19' AS datetime) AS UsingCast,
       CONVERT(datetime, '2015-11-24T14:17:19', 126) AS UsingConvertFrom_ISO8601 ;
    GO
    

    (不要忘记上面例子中字符串中的偷偷摸摸的 T)

    这里的文档中有更详细的描述: https://msdn.microsoft.com/en-us/library/ms187928.aspx

    【讨论】:

      【解决方案3】:

      将日期以英里的形式保存到您的 SQL 数据库中。

      【讨论】:

      • 你能用一个样本解释更多吗?谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      相关资源
      最近更新 更多