热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何格式化yyddd格式的日期没有前导零-Howtoformatdatesinformatyydddhavingnoleadingzeros

IamdealingwithdatescomingfromtheAS400thatareaformofjuliandate.January1st2000come

I am dealing with dates coming from the AS/400 that are a form of julian date. January 1st 2000 comes back as a string value of "1". If the date were in true julian form it would look like 2000001. The date 12/31/2049 is comes back from the AS/400 as "49365". Is there a way to format these dates in my C# code to look like standard short dates?

我正在处理来自AS / 400的日期,这是朱利安日期的一种形式。 2000年1月1日以字符串值“1”返回。如果日期是真正的朱利安形式,它将看起来像2000001.日期12/31/2049从AS / 400返回为“49365”。有没有办法在我的C#代码中格式化这些日期看起来像标准的短日期?

4 个解决方案

#1


2  

What does January 1, 2001 look like?

2001年1月1日是什么样的?

If it looks like "1001", you can pad on the left with zeros to 5 digits and then extract the 2-digit year as the first two digits and the day-of-year number as the last 3. It should then be a simple matter to convert the day-of-year number to a month and day; if nothing else you can do it with a bunch of if statements on day ranges.

如果它看起来像“1001”,你可以在左边用零填充到5位数,然后将2位数年份作为前两位数字提取,将年份数字作为最后3位数。然后应该是将日期数转换为月和日的简单事项;如果没有别的,你可以在日期范围内用一堆if语句来做。

If it looks like "11" because there are no leading zeros in the day number, you're just out of luck as there is no way to differentiate between many dates, such as January 1, 2001 and January 11, 2000.

如果它看起来像“11”,因为日期中没有前导零,那么你只是运气不好,因为没有办法区分许多日期,例如2001年1月1日和2000年1月11日。

P.S. These aren't Julian dates, they're a variation on ordinal dates.

附:这些不是朱利安日期,它们是序数日期的变化。

#2


2  

IF your dates are always of the format 'yyddd':

如果您的日期始终采用'yyddd'格式:

If you can write your SQL statement directly, the following will work...

如果您可以直接编写SQL语句,以下内容将起作用...

SELECT CAST('20' || julianDate as date)
FROM table

If you don't, consider writing a view that incorporates that behaviour (that's one of the reasons views exist...).

如果不这样做,请考虑编写一个包含该行为的视图(这是视图存在的原因之一......)。

For obvious reasons, all dates will be considered year 2000 and later...

由于显而易见的原因,所有日期都将被视为2000年及以后......

IF (for whatever reason) it's removing any leading zeros in each part (as pointed out in comments for @Anomie's answer), you are indeed simply toast. Frankly, the entire dataset is probably a loss, as I'm not sure how even RPG would be able to differentiate between certain dates properly at that point.

如果(无论出于什么原因)它正在删除每个部分中的任何前导零(正如@ Anomie的答案中的评论所指出的那样),你确实只是敬酒。坦率地说,整个数据集可能是一个损失,因为我不确定RPG在这一点上是否能够正确区分某些日期。

#3


2  

IBM defines *JUL date format as yy/ddd. It is not commonly used, but is is an available standard format supported on the AS/400. You say you have a string, so the assumption here is that it is stored as CHAR(5), or 5A in DDS.

IBM将* JUL日期格式定义为yy / ddd。它不常用,但是AS / 400支持可用的标准格式。你说你有一个字符串,所以这里的假设是它在DDS中存储为CHAR(5)或5A。

If you column is called jdt, get the right number of digits in your string, in SQL, with:

如果您的列名为jdt,请在SQL中使用以下内容在字符串中获取正确的位数:

  RIGHT(('00000' || TRIM(jdt)),5)

Now put the slash in:

现在把斜线放入:

  INSERT( RIGHT(('00000'||TRIM(jdt)),5) ,3,0,'/')

DB2/400 can cast this to a real date field, but it will only work properly if you can SET OPTION DATFMT=*JUL. How to do this from C# on Windows would depend on how you are connecting.

DB2 / 400可以将其转换为实际日期字段,但只有在SET OPTION DATFMT = * JUL时它才能正常工作。如何在Windows上使用C#进行此操作取决于您的连接方式。

Let's suppose you can't find the way to set the date format on your connection.

假设您无法找到在连接上设置日期格式的方法。

Solution: Create a user defined function [UDF] in DB2.

解决方案:在DB2中创建用户定义的函数[UDF]。

First, choose an appropriate library to store the function in, and set that as your current library. In OS/400 CL, CHGCURLIB yourlib, or in SQL, SET SCHEMA = yourlib. Thus by default anything you create will go into this library.

首先,选择适当的库来存储函数,并将其设置为当前库。在OS / 400 CL,CHGCURLIB yourlib或SQL中,SET SCHEMA = yourlib。因此,默认情况下,您创建的任何内容都将进入此库。

I recommend storing the SQL definition for your UDF in a source member. (Ask if unfamiliar) You can execute the source with the RUNSQLSTM command.

我建议将UDF的SQL定义存储在源成员中。 (询问是否不熟悉)您可以使用RUNSQLSTM命令执行源。

Your function definition could look something like this:

您的函数定义可能如下所示:

CREATE FUNCTION  CvtJul2Date( jdtin char(5) ) RETURNS DATE            
        LANGUAGE SQL                                                  
        SPECIFIC CVTJUL2DT                                            
        DETERMINISTIC NO EXTERNAL ACTION                              
        CONTAINS SQL                                                  
        RETURNS NULL ON NULL INPUT                                    
        SET OPTION DATFMT = *JUL                                      
  BEGIN                                                               
    RETURN(                                                           
          date( insert( right(('00000'||trim(jdtin)),5) ,3,0,'/') )   
    );                                                                
  END                                                                 

The *JUL option is scoped to the UDF. Any SQL query that runs on the AS/400 should be able to do this conversion, regardless of the DATFMT of the job (assuming you have put this function in a library which is on that job's library list).

* JUL选项的作用域是UDF。无论作业的DATFMT如何(假设您已将此函数放在该作业的库列表中的库中),在AS / 400上运行的任何SQL查询都应该能够执行此转换。

#4


1  

Oops... My bad. A method will still probably have to be written.

糟糕...我的坏。仍然可能必须编写一种方法。

Based on your description, an increase of 1 is a new day? Looks like you will have to do some math to calculate the date. Maybe create a function like

根据您的描述,增加1是新的一天?看起来你必须做一些数学来计算日期。也许创建一个像

public DateTime ConvertDate(int julianDate)
{

}

This is untested and may need some changes. But this would be my suggestion.

这是未经测试的,可能需要进行一些更改。但这是我的建议。


推荐阅读
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了Shell中for命令的基本格式和用法,通过提供一个值列表来迭代执行一系列命令。同时还介绍了如何读取列表中的值,并给出了for命令与其他命令的结合使用示例。 ... [详细]
author-avatar
不会做饭的我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有