js 字符串转换为时间格式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 字符串转换为时间格式相关的知识,希望对你有一定的参考价值。
Date.prototype.Format = function (fmt)
var o=
"M+":this.getMonth()+1,//月份
"d+":this.getDate(),//日
"h+":this.getHours(),//小时
"m+":this.getMinutes(),//分
"s+":this.getSeconds(),//秒
"q+":Math.floor((this.getMonth()+3)/3),//季度
"S":this.getMilliseconds()//毫秒
;
if(/(y+)/.test(fmt))
fmt=fmt.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length));
for(var k in o)
if(new RegExp("("+k+")").test(fmt))
fmt=fmt.replace(RegExp.$1,(RegExp.$1.length==1)?(o[k]):(("00"+o[k]).substr((""+o[k]).length)));
return fmt;
var str = "2015-02-27";
console.log(new Date(str).Format("yyyy/MM/dd")); //这样的可以转换成2015/02/27
var str1 = "27-02-2015";
console.log(new Date(str1 ).Format("yyyy/MM/dd"));//这样得到结果就是“NaN/aN/aN”
请问怎么回事呢,谢谢
其他写法在部分浏览器中无法解析
如,IE7不支持(yyyy-MM-dd,只支持/分割)
chrome支持的种类很多
Firefox支持yyyy/M/d但不支持yyyy-M-d等 参考技术A 在js里面,"27-02-2015"是非法的日期格式,所以new Date(str1) 这里就得到了一个非法的日期,后面再Format就出问题了。
NOTE:str1日期字符串应该更正为 "02-27-2015"
在Android中将字符串日期转换为时间戳?
【中文标题】在Android中将字符串日期转换为时间戳?【英文标题】:Convert string Date into timestamp in Android? 【发布时间】:2011-10-23 00:42:49 【问题描述】:我想转换我的日期(字符串格式),例如2011 年 9 月 13 日,进入时间戳。我使用了下面的代码,但我得到了 2011-09-13 00:00:00.0 因此。但我想要像 1312828200000 格式的时间戳。
我不明白如何转换它。
我的代码:
String str_date="13-09-2011";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str_date);
java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
System.out.println("Today is " +timeStampDate);
【问题讨论】:
仅供参考,java.util.Date
、java.util.Calendar
和 java.text.SimpleDateFormat
等麻烦的旧日期时间类现在已被 java.time 类所取代。大多数 java.time 功能在 ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。在ThreeTenABP 项目中进一步适用于早期的Android。见How to use ThreeTenABP…。
【参考方案1】:
这一行:
"Today is " +timeStampDate
调用TimeStamp.toString()
方法“以JDBC时间戳转义格式格式化时间戳。yyyy-mm-dd hh:mm:ss.fffffffff
,其中ffffffffff表示纳秒。”
您在内部获得的时间戳具有您想要的值。如果你想得到它而不是使用:
System.out.println("Today is " + timeStampDate.getTime());
String str_date="13-09-2011";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str_date);
java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
System.out.println("Today is " + timeStampDate.getTime());
或者如果你不需要Timestamp
,你可以直接使用date.getTime()
。它"Returns the Date as a millisecond value."
:
String str_date="13-09-2011";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str_date);
System.out.println("Today is " + date.getTime());
【讨论】:
【参考方案2】:如果您使用 getTime()
的 Date
对象,您将以毫秒为单位获得时间。
无需使用Timestamp
即可获得结果。
String str_date="13-09-2011";
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = (Date)formatter.parse(str_date);
System.out.println("Today is " +date.getTime());
上面的代码会打印出你需要的1312828200000
,这是一个长值。
【讨论】:
嗨,我如何将日期和时间转换为长 "12-09-2011"+"12:30" 嗨。我有一个输入为String dateStr = "26-04-2016 19:45"; DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy kk:mm");
,我尝试了你给出的解决方案,但它给出了错误的结果。
仅供参考,java.util.Date
、java.util.Calendar
和 java.text.SimpleDateFormat
等麻烦的旧日期时间类现在已被 java.time 类所取代。大多数 java.time 功能在 ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。在ThreeTenABP 项目中进一步适用于早期的Android。见How to use ThreeTenABP…。
getTime() 获取的时间不是毫秒!使用 getTimeInMillis() 以字符串形式获取时间戳【参考方案3】:
String str_date=month+"-"+day+"-"+yr;
DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date);
long output=date.getTime()/1000L;
String str=Long.toString(output);
long timestamp = Long.parseLong(str) * 1000;
【讨论】:
只有这个是正确答案所有其他答案给出不正确的结果【参考方案4】:或许能帮到你
long time= System.currentTimeMillis();//timestamp in milliseconds of current time
String tp = Long.toString(time);//use timestamp as a string
【讨论】:
【参考方案5】:tl;博士
使用现代 java.time 类。
LocalDate.parse(
"13-09-2011" ,
DateTimeFormatter.ofPattern( "dd-MM-uuuu" )
)
.atStartOfDay(
ZoneId.of( "Africa/Casablanca" ) // Or use `ZoneOffset.UTC` instead of a zone.
)
.toInstant()
.toEpochMilli()
看到这个code run live at IdeOne.com。
1315872000000
详情
显然,您希望将特定日期的第一时刻表示为自 UTC 中 1970 年第一时刻的纪元参考以来的毫秒数。
java.time
现代方法使用 java.time 类,该类在几年前取代了麻烦的遗留类,例如 Date
、Calendar
和 SimpleDateFormat
。
首先将您的输入字符串解析为LocalDate
,以获得没有时间和时区的仅日期值。
提示:在将日期时间值作为文本交换时,不要使用此类自定义格式,而是使用标准的ISO 8601 格式。 java.time 类在解析/生成字符串时默认使用它们。
String input = "13-09-2011" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
确定该日期当天的第一个时刻。这样做需要一个时区。对于任何给定的时刻,日期在全球范围内因区域而异。例如,Paris France 中午夜后几分钟是新的一天,而 Montréal Québec 中仍然是“昨天”。
如果没有指定时区,JVM 会隐式应用其当前的默认时区。该默认值可能在运行时(!)期间change at any moment,因此您的结果可能会有所不同。最好将 desired/expected time zone 明确指定为参数。
以continent/region
的格式指定proper time zone name,例如America/Montreal
、Africa/Casablanca
或Pacific/Auckland
。切勿使用 2-4 个字母的缩写,例如 EST
或 IST
,因为它们不是真正的时区,没有标准化,甚至不是唯一的 (!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
永远不要假设一天从 00:00 开始。在某些日期的某些区域中,一天可能从另一个时间开始,例如 01:00。让 java.time 确定第一时刻。
ZonedDateTime zdt = ld.startOfDay( z ) ; // Determine first moment of the day on this date in this zone. May not be 00:00.
通过提取Instant
,从该区域调整为UTC。
Instant instant = zdt.toInstant() ;
获取自 1970-01-01T00:00Z 以来的毫秒数。请注意可能的数据丢失,因为Instant
具有更精细的纳秒分辨率。任何微秒或纳秒都将被忽略。
long millisecondsSinceEpoch = instant.toEpochMilli() ;
您可以返回另一个方向,从一个从纪元计数到 Instant
。
Instant instant = Instant.ofEpochMilli( millisecondsSinceEpoch) ;
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.*
类。
从哪里获得 java.time 类?
Java SE 8、Java SE 9、Java SE 10、Java SE 11 和更高版本 - 具有捆绑实现的标准 Java API 的一部分。 Java 9 添加了一些小功能和修复。 Java SE 6 和 Java SE 7 大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android java.time 类的 Android 捆绑包实现的更高版本。 对于早期的 Android (ThreeTenABP 项目适应 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…。【讨论】:
【参考方案6】:科特林
val dateString = "17-09-2021"
val formatter = SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH)
val date = formatter.parse(dateString) as Date
Log.i("i","Today is " + date.time)
你会得到类似于 1616668471659 的东西
【讨论】:
以上是关于js 字符串转换为时间格式的主要内容,如果未能解决你的问题,请参考以下文章