js和C# 时间日期格式转换

下午在搞MVC和EXTJS的日期格式互相转换遇到了问题,我们从.NET服务器端序列化一个DateTime对象的结果是一个字符串格式,如 ‘/Date(1335258540000)/‘ 这样的字串。

整数1335258540000实际上是一个1970 年 1 月 1 日 00:00:00至这个DateTime中间间隔的毫秒数。通过javascript用eval函数可以把这个日期字符串转换为一个带有时区的Date对象,如下

用var date = eval(‘new ‘ + eval(‘/Date(1335258540000)/‘).source) 这样即可得到一个JS对象

通过alert(date)查看比较清楚。

Tue Apr 24 17:09:00 UTC+0800 2012

上面是C# JSON序列化日期自动得到的字符串,也可以通过C#写一个函数来获取这个数字,例如


1

2

3

4

5

6

7

public long MilliTimeStamp(DateTime TheDate)

        {

            DateTime d1 = new DateTime(1970, 1, 1);

            DateTime d2 = TheDate.ToUniversalTime();

            TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);

            return (long)ts.TotalMilliseconds;

        }

通过上面的函数跟利用JSON序列化获取到的字符串中的整数是一样的。

但是,在从客户端返回服务器端的时候,日期却遇到了问题,如何将javascript的Date对象传回服务器端呢?

先通过javascript Date中的getTime()来获取到这个整数,然后服务器端对这个整数进行解析,‘构造’成一个C#的DateTime对象。思路大概是这样的,不过在逆向回去的时候却遇到了点麻烦。

public DateTime ConvertTime(long milliTime)
        {
            long timeTricks = new DateTime(1970, 1, 1).Ticks + milliTime * 10000 ;
            return new DateTime(timeTricks);
        }

通过ConvertTime得到的结果发现时间少了8个小时,这刚好是服务器的时区,东八区时间,也就是说还要加上8小时的纳秒,因为C#的时间戳单位是一千万分之一秒,一个小时3600秒,即8*3600*10000000

所以修改了ConvertTime函数,正确的如下:

1 public DateTime ConvertTime(long milliTime)
2         {
3             long timeTricks = new DateTime(1970, 1, 1).Ticks + milliTime * 10000 + TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours * 3600 * (long)10000000;
4             return new DateTime(timeTricks);
5         }

时间: 2024-11-19 09:26:59

js和C# 时间日期格式转换的相关文章

[js] js和C# 时间日期格式转换

下午在搞MVC和EXTJS的日期格式互相转换遇到了问题,我们从.NET服务器端序列化一个DateTime对象的结果是一个字符串格式,如 '/Date(1335258540000)/' 这样的字串. 整数1335258540000实际上是一个1970 年 1 月 1 日 00:00:00至这个DateTime中间间隔的毫秒数.通过javascript用eval函数可以把这个日期字符串转换为一个带有时区的Date对象,如下 用var date = eval('new ' + eval('/Date(

poj 3751 时间日期格式转换

题目链接:http://poj.org/problem?id=3751 题目大意:按照要求的格式将输入的时间日期进行转化. 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 int main () 5 { 6 int t; 7 cin>>t; 8 while (t--) 9 { 10 int y,m,d,xs,fz,ms; 11 char ch1,ch2,ch3,ch4,ch5; 12

Java练习 SDUT-2246_时间日期格式转换

时间日期格式转换 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于日期的常用格式,在中国常采用格式的是"年年年年/月月/日日"或写为英语缩略表示的"yyyy/mm/dd",此次编程竞赛的启动日期"2010/11/20"就是符合这种格式的一个日期, 而北美所用的日期格式则为"月月/日日/年年年年"或"mm/dd /yyyy",

Java时间日期格式转换

import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @return 返回时间类型 yyyy-MM-dd HH:mm:ss */ public static Date getNowDate() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd

Java时间日期格式转换 转自:http://www.cnblogs.com/edwardlauxh/archive/2010/03/21/1918615.html

Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @return 返回时间类型 yyyy-MM-dd HH:mm:ss */ public static Date getNowDate() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateForma

2246=时间日期格式转换(JAVA)

1 yyyy:年 2 MM:月 3 dd:日 4 hh:1~12小时制(1-12) 5 HH:24小时制(0-23) 6 mm:分 7 ss:秒 8 S:毫秒 9 E:星期几 10 D:一年中的第几天 11 F:一月中的第几个星期(会把这个月总共过的天数除以7) 12 w:一年中的第几个星期 13 W:一月中的第几星期(会根据实际情况来算) 14 a:上下午标识 15 k:表示一天24小时制(1-24). 16 K:表示一天12小时制(0-11). 17 z:表示时区 import java.t

JS时间日期格式转换

第一种: function ConvertJSONDate(jsondate) {        if (jsondate != "" && jsondate != null) {            var date = new Date(parseInt(jsondate.replace("/Date(", "").replace(")/", ""), 10));           

js读取excel中日期格式转换问题

在使用js-xlsx插件来读取excel时,会将2018/10/16这种数据自动装换成48264.12584511. 所以需要自己手动再转换回来 // excel读取2018/01/01这种时间格式是会将它装换成数字类似于46254.1545151415 numb是传过来的整数数字,format是之间间隔的符号 formatDate(numb, format) { const time = new Date((numb - 1) * 24 * 3600000 + 1) time.setYear(

Java实现时间日期格式转换示例

package com.hanqi.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 日期转换器 * * @author asus * */ public class DateConvertor { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd H