asp.net - java calendar类的如下操作 在.net c#中要怎么实现?
大家讲道理
大家讲道理 2017-04-17 14:53:48
0
1
930

Java has Calendar Class, but C# doesn't. How to implement the below Java function in C#?

//获得从昨天开始的时间 in Java
    public static long yesterdayBeginTime() {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, -1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTimeInMillis();
    }
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(1)
迷茫

已經在你另一個貼紙裡回答你了 http://segmentfault.com/q/1010000003707587

主要是 C# 和 Java 的時間表示有點不同

  • C# 用 Tick(100奈秒),Java 用毫秒。

  • C# 是從 0001-1-1 開始,Java 是從 1970-1-1 開始

所以需要轉換,下面兩個轉換方法是從 Viti.Util 抄來的程式碼

        /// <summary>
        /// 计算从1970年1月1日到指定日期的毫秒数数,与 Java 中 <c>java.util.Date.getTime()</c> 返回的值相同。
        /// </summary>
        /// <param name="value"></param>
        /// <param name="timezone"></param>
        /// <returns></returns>
        public static long ToJavaMilliseconds(this DateTime value, TimeZoneInfo timezone = null)
        {
            DateTime date1970 = new DateTime(1970, 1, 1, 0, 0, 0);
            date1970 = TimeZoneInfo.ConvertTimeFromUtc(date1970, timezone ?? TimeZoneInfo.Local);
            return (value.Ticks - date1970.Ticks) / 10000;
        }

        /// <summary>
        /// 根据 Java 中表示时间和 <c>long</c> 型数据,恢复成 <see cref="DateTime" /> 类型数据。
        /// </summary>
        /// <param name="value"></param>
        /// <param name="timezone"></param>
        /// <returns></returns>
        public static DateTime FromJavaMilliseconds(long value, TimeZoneInfo timezone = null)
        {
            DateTime date1970 = TimeZoneInfo.ConvertTimeFromUtc(
                new DateTime(1970, 1, 1), timezone ?? TimeZoneInfo.Local);
            return new DateTime(date1970.Ticks + value * 10000);
        }
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板