C# 怎样把 DateTime.Now.Ticks转换为常规日期的形式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 怎样把 DateTime.Now.Ticks转换为常规日期的形式相关的知识,希望对你有一定的参考价值。

如转换成:2010-8-8 12:24:30

1、在新程序界面空白窗口上放置合适的控件:包括,显示操作流程的textbox控件;用于显示用户选择日期内容的3个textbox控件。

2、在【工具箱】中找到【DateTimePicker】,双击加入界面。

3、调整【DateTimePicker】控件的位置。点击【DateTimePicker】控件,在属性中找到【ValueChanged】。

4、双击进入代码编辑界面。

5、生成exe文件进行测试,点击日期控件,显示下列日期菜单可供选择.。

6、选择2014年5月1日,可以看到对应的文本框中和日志中的提示。

7、分别选择其他日期,可以看到选择效果。

参考技术A

把 DateTime.Now.Ticks转换为常规日期方法如下:

Int64 NowTimeTicks = DateTime.Now.Ticks / 10000; //获取当前的ticks数,单位ms

//当前的ticks转为时间格式

 //当前的ticks转为时间类型

DateTime nowtime = new DateTime(NowTimeTicks*10000 );   

//输出指定的时间格式

Console.WriteLine(nowtime.ToString("yyyy-MM-dd HH:mm:ss"));  

ticks这个属性值是指从0001年1月1日12:00:00开始到此时的以ticks为单位的时间,就是以ticks表示的时间的间隔数.

使用DateTime.Now.Ticks返回的是一个long型的数值。

扩展资料:

1ticks=100纳秒=0.1微秒

1毫秒=10000ticks

1微秒=1纳秒

1毫秒=1000微秒;

1秒=1000毫秒;

指定的时间转为ticks数:

//从时间控件获取时 

DateTime dt = dateTimePicker1.Value;               

//输出指定格式        

Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm:ss"));       

//输出ms数

Console.WriteLine(dt.Ticks/10000);                                             

参考技术B 日期型数据,在 C# 中的参与运算的时候,应该也是转换为长整型数据来运算的。它的长整型值是自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。这个数在 C# 的 DateTime 中被称为 Ticks(刻度)。DateTime 类型有一个名为 Ticks 的长整型只读属性,就保存着这个值。如此,要从一个 DataTime 型数据得到 long 型值就非常简单了,只需要读出 DataTime 对象的 Ticks 值即可,如:

long longDate = DateTime.Now.Ticks;

  DateTime 的构造函数中也提供了相应的,从长整型数据构造 DateTime 型数据的函数:DateTime(long)。如:

DateTime theDate = new DateTime(longDate);
参考技术C DateTime.Now.Ticks 是指从DateTime.MinValue之后过了多少时间,10000000为一秒,保存在long类型的变量里,可以将它传到datetime的构造函数内转成时间类型。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication26

class Program

static void Main(string[] args)

long ticks = DateTime.Now.Ticks;

DateTime now = new DateTime(ticks);
Console.WriteLine(now.ToString("yyyy-MM-dd hh:mm:ss"));

Console.ReadLine();


本回答被提问者采纳

如何使用 C# 生成随机并唯一的数字?

咨询区

  • Christian Peut

我的项目中需要生成若干个并且唯一的随机数,我用的是 System.Random,种子给的是 DateTime.Now.Ticks ,参考如下代码:

private void NewNumber()

    Random a = new Random(DateTime.Now.Ticks.GetHashCode());

    MyNumber = a.Next(0, 10);

当我多次调用 NewNumber() 方法时,我发现会经常出现重复的值,一些朋友说是因为每次都 new 了一下 Random 所致,建议提取出来,代码如下:

public Random a = new Random(DateTime.Now.Ticks.GetHashCode());
private void NewNumber()

    MyNumber = a.Next(0, 10);

虽然随机性达到了,但我发现还是会存在 重复 的情况,请问是否有更好的解决方法。

回答区

  • tsme86

如果你仅仅是需要在  0-9 之间做 随机唯一 的话,我建议你用 洗牌策略 来打乱数组元素即可,参考如下代码:

static void Main(string[] args)
        
            var nums = Enumerable.Range(0, 10).ToArray();
            var rnd = new Random();

            // Shuffle the array
            for (int i = 0; i < nums.Length; ++i)
            
                int randomIndex = rnd.Next(nums.Length);
                int temp = nums[randomIndex];
                nums[randomIndex] = nums[i];
                nums[i] = temp;
            

            // Now your array is randomized and you can simply print them in order
            for (int i = 0; i < nums.Length; ++i)
                Console.WriteLine(nums[i]);
        
  • JOSEFtw

如果你的生成范围小,我建议你用 Guid.NewGuid() 来实现随机性,但范围大的话,我不建议使用,因为性能是真的很差,参考代码如下:

static void Main(string[] args)
        
            var result = Enumerable.Range(0, 9).OrderBy(g => Guid.NewGuid()).ToArray();

            for (int i = 0; i < result.Length; ++i)
                Console.WriteLine(result[i]);
        
  • Vasily Novsky

我是借用 HashSet 来找到 N 个随机并唯一的数字,道理很简单,HashSet 本身就可以保证数字的唯一性,参考如下代码:

using System;
using System.Collections.Generic;

namespace ConsoleApplication1

    class RnDHash
    
        static void Main()
        
            HashSet<int> rndIndexes = new HashSet<int>();
            Random rng = new Random();
            int maxNumber;
            Console.Write("Please input Max number: ");
            maxNumber = int.Parse(Console.ReadLine());
            int iter = 0;
            while (rndIndexes.Count != maxNumber)
            
                int index = rng.Next(maxNumber);
                rndIndexes.Add(index);
                iter++;
            
            Console.WriteLine("Random numbers were found in 0 iterations: ", iter);
            foreach (int num in rndIndexes)
            
                Console.WriteLine(num);
            
            Console.ReadKey();
        
    

点评区

从时间复杂度以及条件允许的情况下,我觉得 洗牌策略 是一个好方案,其次是 HashSet,最后是 Guid.NewGuid(),这题目相信能给大家提供好的思路。

以上是关于C# 怎样把 DateTime.Now.Ticks转换为常规日期的形式的主要内容,如果未能解决你的问题,请参考以下文章

使用 DateTime.Now.Ticks 生成唯一的数字 ID

我可以获得与 DateTime.Now.Ticks 等效的 VBA 吗?

生成随机的唯一值 C#

在C#中获取如PHP函数time()一样的时间戳

c# 中如何取得当前时间后,把当前时间和数据库中的时间做判断,比如数据库中date的值为2011-01-11,当前时

请问DateTime.Now.Ticks.ToString()是啥意思